2017-03-07 52 views
1
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() 

,如果我需要serialze查詢集我怎麼能做到這一點,沒有關於它的文件,我需要ITEM_ID,ITEM_NAME,MealRecipe_qty一個JSON。我是否必須序列化所有模型?我需要根據所選菜單來操作前端的配方數量。Django的REST框架多對多使用額外字段系列化

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

OR

MealRecipe.objects.filter(meal__menu=some_menu_instance).distinct() 

我無法弄清楚如何通過結果Ø此查詢到前端

回答

1

爲了您ITEM_ID,ITEM_NAME,MealRecipe_qty的要求,您將需要序列MealRecipe模型和Item模型。

在MealRecipe模型

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

也給出了相關的名稱,項目,你的串行化將是

class MealRecipeSerializer(serializers.ModelSerializer): 

    class Meta: 
     model = MealRecipe 
     fields = ('qty') 

class ItemSerializer(serializers.ModelSerializer): 

    qty = MealRecipeSerializer() 
    class Meta: 
     model = Item 
     fields = ('id','name','qty') 

此外,如果你傳遞一個查詢集到串行做得一樣,MealRecipeSerializer(many=True)

+0

它的工作,但我用MealRecipe.objects.all(),我可以使用MealRecipe.objects.filter(meal__menu = some_menu_instance).distinct()結果作爲我的序列化程序的查詢集? – gaccep

+0

應該工作。如果查詢提供了MealRecipe對象的查詢集,它應該可以工作。 –

+0

請upvote :) –

相關問題