繁体   English   中英

如何使用django rest_framework序列化带有直通模型的ManyToManyFields

[英]How to serialize using django rest_framework a ManyToManyFields with a Through Model

我有一个Recipe模型,它包含一个IngredientType对象的M2M字段。 这个字段,也就是ingredient_list,通过一个Ingredient对象使用臭名昭着的“通过”模型,该对象将额外的数据添加到我的IngredientType中。 这些是我的课程:

class Recipe(models.Model):
    user_profile = models.ForeignKey(UserProfile, null=True, blank = True)
    name = models.CharField(max_length=200)
    photo1 = models.ImageField( upload_to = 'images/recipies', help_text="This photo will show by default")
    ingredient_list = models.ManyToManyField(IngredientType,through='Ingredient')

class Ingredient(models.Model):
    ingredient_type = models.ForeignKey(IngredientType)
    recipe = models.ForeignKey(Recipe)
    amount = models.IntegerField()
    units = models.CharField(max_length=4,choices=UNIT, 
                               default=None, null=True, blank = True)

class IngredientType(models.Model):
    name = models.CharField(max_length=200)
    plural_name = models.CharField(max_length=200)
    photo = models.ImageField( upload_to = 'images/ingredients')
    is_main = models.BooleanField()

我尝试使用rest_framework序列化它们:

class IngredientTypeSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = IngredientType
        fields=('name', 'plural_name', 'photo', 'is_main')

class IngredientSerializer(serializers.HyperlinkedModelSerializer):
    ingredient_type = IngredientTypeSerializer(source = 'ingredient_type')
    amount =  serializers.Field(source='ingredient_type.amount')
    units =  serializers.Field(source='ingredient_type.units')
    recipe = serializers.Field(source='Recipe.name')
class Meta:
    model = Ingredient
    fields=('amount', 'units')

class RecipeSerializer(serializers.ModelSerializer):
    ingredient_list = IngredientSerializer(source='ingredient_list', many=True, read_only = True)
    class Meta:
        model = Recipe
        fields = ('user_profile', 'name','photo1','ingredient_list')

但是在尝试运行时,我得到一个AttributeError:'IngredientType'对象没有属性'ingredient_type'

显然,当我改变这条线时:

ingredient_list = IngredientSerializer(source='ingredient_list', many=True, read_only = True)

至:

ingredient_list = IngredientTypeSerializer(source='ingredient_list', many=True, read_only = True)

也就是说,更改串行器,它可以工作,但没有取给我的成分数据。 我使用过这个链接: 在Django Rest Framework的响应中包含中介(通过模型)作为参考,但显然它没有解决我的问题。
任何帮助,将不胜感激。 tnx,Nitzan

Recipe模型上,对于ingredient_list字段,您有一个指向IngredientTypeManyToManyField

RecipeSerializeringredient_list字段不使用IngredientTypeSerializer ,而是使用IngredientSerializer

这是错误。 (它解释了错误消息 - source处的实际模型没有序列化程序查找的属性。)

除此之外,您的命名方案非常混乱。 “食谱”很好,但你所谓的“IngredientType”应该只是“成分”,然后你应该找到通过表的不同名称。 (也许是“RecipeIngredientDetails”)

我希望有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM