2012-08-24 74 views
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同時包含Meal對象,Ingredient對象。 (這樣可以在需要的清單組配料混合在一起時,他們吃一頓飯。)

問題是,我希望有一個GroceryList能夠包含相同的Meal兩次以上。什麼是最有效的解決方案?

我曾考慮過包裹Meal類中的對象(「MealContainer」)是維持雙方的根本Meal,旁邊一個數量,但似乎有點重手。

回答

3

也許考慮through modelquantity字段。

+0

來到這裏來提示這一點。你可能還想實現一個自定義的count()方法,它考慮到了這一點... – bdeniker

+0

這看起來很完美,我會給它一個鏡頭。謝謝 –

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)