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)

これにより、にオブジェクトとオブジェクトのGroceryList両方を含めることができます。(このようにして、食事に必要な材料をリストにまとめることができます。)MealIngredient

問題はGroceryList、同じものMealを 2 回以上含むことができるようにしたいということです。最も効率的なソリューションは何ですか?

基になると数量の両方を維持Mealするオブジェクト (' ') でクラスをラップすることを検討しましたが、それは少し手間がかかるようです。MealContainerMeal

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 に答える