2017-02-20 12 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

私はオブジェクトに属性 'name'がありません – gaccep

+0

私はあなたの問題を正しく理解し、適切な変更を加えましたことを願っています。 – TitanFighter

0

MealRecipe.objects.filter(meal__menu=some_menu_instance).distinct()は、それを行う必要があります。またはmeal__menu__id=some_idインスタンスなどではなくメニューIDがある場合は、それは単なる標準の相互関係クエリです。

+0

ありがとうございました。 – gaccep

関連する問題