gpt4 book ai didi

python - 如何使用 django rest 框架序列化一个带有直通模型的 ManyToManyField

转载 作者:太空狗 更新时间:2023-10-29 21:46:45 25 4
gpt4 key购买 nike

我有一个 Recipe 模型,它包含一个 IngredientType 对象的 M2M 字段。这个字段,又名 ingredient_list,通过一个将额外数据添加到我的 IngredientType 的 Ingredient 对象使用臭名昭著的“through”模型。这些是我的类(class):

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)

也就是说,更改 Serializer,它可以工作,但没有获取成分数据。我用过这个链接: Include intermediary (through model) in responses in Django Rest Framework作为引用,但显然它没有解决我的问题。
任何帮助,将不胜感激。谢谢,尼赞

最佳答案

在您的 Recipe 上模型,为 ingredient_list字段你有一个ManyToManyField指向 IngredientType .

在您的 RecipeSerializeringredient_list字段未使用 IngredientTypeSerializer而是 IngredientSerializer .

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

除此之外,您的命名方案非常困惑。 “Recipe”很好,但你所说的“IngredientType”可能应该只是“Ingredient”,然后你应该为直通表找到一个不同的名称。 (也许是“RecipeIngredientDetails”)

希望对您有所帮助。

关于python - 如何使用 django rest 框架序列化一个带有直通模型的 ManyToManyField,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19180242/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com