我有一个代表简单杂货清单的Django模型,如下所示(为简洁而截断)
class Meal(models.Model):
name = models.CharField(max_length = 200)
ingredients = models.ManyToManyField(Ingredient)
class GroceryList(models.Model):
name = models.CharField(max_length = 200)
meals = models.ManyToManyField(Meal)
ingredients = models.ManyToManyField(Ingredient)
这允许GroceryList
包含Meal
个对象和Ingredient
个对象。 (这样,当需要膳食时,列表可以将成分组合在一起。)
问题是,我希望GroceryList
能够包含相同的Meal
两次或更多次。什么是最有效的解决方案?
我曾考虑将Meal
类包装在一个对象('MealContainer
')中,该对象同时保留了基础Meal
和数量,但这看起来有点笨拙。
答案 0 :(得分:3)
或许考虑使用quantity
字段的through
model。
答案 1 :(得分:1)
我不知道这是否是最有效的方法,但您可以将您的膳食列表分解为每日菜单。这通常是我妻子计划我们的购物清单的方式。
class Meal(models.Model):
MEAL_TYPE = (
(u'B','Breakfast'),
(u'2','Second Breakfast'),
(u'E','Elevenses'),
(u'L','Luncheon'),
(u'A','Afternoon Tea'),
(u'D','Dinner'),
(u'S','Supper'),
)
name = models.CharField(max_length = 200)
ingredients = models.ManyToManyField(Ingredient)
meal_type = models.CharField(max_length=2, choices=MEAL_TYPE)
class DailyMenu(models.Model):
date = models.DateField()
meal = models.ManyToManyField(Meal)
class GroceryList(models.Model):
name = models.CharField(max_length = 200)
meal_menus = models.ManyToManyField(DailyMenu)
ingredients = models.ManyToManyField(Ingredient)