在Django ManyToMany关系中存储同一项的多个实例

时间:2012-08-24 13:09:59

标签: python django orm django-models

我有一个代表简单杂货清单的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和数量,但这看起来有点笨拙。

2 个答案:

答案 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)