【问题标题】:Store multiple instances of same item in Django ManyToMany relationship在 Django ManyToMany 关系中存储同一项目的多个实例
【发布时间】:2012-08-24 13:09:58
【问题描述】:

我有一个代表简单购物清单的 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 以及一个数量,但这似乎有点笨拙。

【问题讨论】:

    标签: python django orm django-models


    【解决方案1】:

    也许考虑一个带有quantity 字段的through model

    【讨论】:

    • 来到这里就是为了建议这个。您可能还想实现一个自定义 count() 方法,它会考虑到这一点......
    • 这看起来很完美,我会试一试。谢谢
    【解决方案2】:

    我不知道这是否是最有效的方式,但您可以将膳食清单分解为每日菜单。这通常是我妻子计划我们的购物清单的方式。

    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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-02
      • 2019-03-31
      • 1970-01-01
      • 1970-01-01
      • 2012-03-05
      • 1970-01-01
      • 2020-05-14
      • 1970-01-01
      相关资源
      最近更新 更多