0

我有一个代表简单购物清单的 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)

这允许 aGroceryList包含Meal对象和Ingredient对象。(这样,当一顿饭需要时,列表可以将成分组合在一起。)

问题是,我希望 aGroceryList能够包含Meal两次或更多相同的内容。什么是最有效的解决方案?

我曾考虑将类包装Meal在一个对象 (' MealContainer') 中,该对象同时维护基础Meal和数量,但这似乎有点笨拙。

4

2 回答 2

3

也许考虑一个带有字段的through模型。quantity

于 2012-08-24T13:16:01.740 回答
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)
于 2012-08-24T14:19:03.083 回答