You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Django餐厅系统中利用Ingredient模型字段计算Recipe模型的关联字段?

解决方法

嘿,这个问题其实很好解决——你已经通过ingredient_name外键把Recipe和Ingredient模型关联起来了,直接调用关联对象的cost_per_unit()方法就行!

你只需要修改Recipe模型里的cost_per_ingredient方法,让它计算关联配料的单位成本乘以当前配方里的用量:

def cost_per_ingredient(self):
    # 用关联的Ingredient对象的单位成本,乘以当前配方的配料用量
    return self.ingredient_name.cost_per_unit() * self.ingredient_quantity

给你贴个完整的Recipe模型代码,顺便提个小细节:Django的外键字段建议加上on_delete参数(比如on_delete=models.CASCADE),避免后续出现数据库关联错误:

class Recipe(models.Model):
    ingredient_name = models.ForeignKey(Ingredient, on_delete=models.CASCADE)
    ingredient_quantity = models.FloatField()
    unit_of_measure = models.CharField(max_length=20, choices=UNIT_CHOICES)
    created = models.DateTimeField(auto_now_add=True)
    modified = models.DateTimeField(auto_now=True)
    
    def cost_per_ingredient(self):
        return self.ingredient_name.cost_per_unit() * self.ingredient_quantity

额外小提醒

还有个需要注意的地方:如果Ingredient里的quantity是0的话,cost_per_unit()会触发除以零的错误。你可以在Ingredient的方法里加个判断来处理这种边界情况,比如:

def cost_per_unit(self):
    if self.quantity == 0:
        return 0.0  # 或者根据你的业务需求抛出异常、返回提示信息
    return self.cost / self.quantity

这样就能避免运行时出现崩溃啦!

内容的提问来源于stack exchange,提问作者Pablo Calderon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 23:14:10