2017-02-20 101 views
0

我需要獲取給定菜單的項目名稱和數量的列表。我如何查詢並返回具有所需列的QuerySet?瀏覽多對多的關係Django

我只得到菜單列表,但仍然無法獲取數量。我應該怎麼做多個查詢,或者嘗試使用原始的SQL

class Item(models.Model): 
    name = models.CharField(max_length=20) 

class Meals(models.Model): 
    name = models.CharField(max_length=50) 
    ingredients = models.ManyToManyField(Item, through='MealRecipe') 


class Menu(models.Model): 
    name = models.CharField(max_length=50) 
    meals = models.ManyToManyField(Meals,through='CompMenu') 


class CompMenu(models.Model): 
    TYPE_COMP = (
     ('B', 'Breakfast'), 
     ('L', 'Lunch'), 
     ('D', 'Dinner') 
    ) 
    menu = models.ForeignKey(Menu) 
    meal = models.ForeignKey(Meals) 
    type = models.CharField(max_length=1, choices=TYPE_COMP) 

class MealRecipe(models.Model): 
    meal = models.ForeignKey(Meal) 
    item = models.ForeignKey(Item) 
    qty = models.IntegerField() 

回答

0

如果我沒記錯correclty,您可以通過這種方式獲得nameqty

menu = Menu.objects.filter(name='some_name') 
meals_of_menu = menu[idx].meals.all() 

receipes = MealRecipe.objects.filter(meal__in=meals_of_menu) 
for receipe in receipes: 
    name = receipe.item.name 
    qty = receipe.qty 
+0

謝謝,我怎樣才能得到與給定菜單相關的給定餐飲清單中的物品清單。我應該使用多個查詢嗎? – gaccep

+0

我得到的對象有沒有屬性'名稱' – gaccep

+0

我希望我現在正確理解你的問題,並作出適當的修改。 – TitanFighter

0

MealRecipe.objects.filter(meal__menu=some_menu_instance).distinct()應該這樣做,如果我沒有記錯。或者meal__menu__id=some_id,如果你有菜單ID而不是實例等。它只是一個標準的交叉關係查詢。

+0

謝謝,也按照您評論的方式工作。 – gaccep