如何在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
相关产品推荐
相关产品推荐

