我收到了这个错误消息
获取字段值时发生AttributeError
id
论串行器
IngredientSerializer
.
序列化程序字段的名称可能不正确,并且与上的任何属性或键都不匹配
Ingredient
例子
原始异常文本为:“Ingredient”对象没有属性“Ingredient”。
当试图在DRF中保存模型时。
我的序列化程序:
from django.db import transaction
from rest_framework import serializers
from .models import Recipe, Ingredient, RecipeIngredient, Tag
class IngredientSerializer(serializers.ModelSerializer):
id = serializers.PrimaryKeyRelatedField(queryset=Ingredient.objects.all, source="ingredient")
amount = serializers.IntegerField()
class Meta:
model = RecipeIngredient
fields = ["id", "amount"]
class CreateRecipeSerializer(serializers.ModelSerializer):
ingredients = IngredientSerializer(many=True)
tags=serializers.PrimaryKeyRelatedField(...)
image = serializers.ImageField(required=False)
name = serializers.CharField(source="recipe_name")
class Meta:
model = Recipe
fields = ["name", "image", "text", "cooking_time", "ingredients", "tags"]
def create(self, validated_data):
ingredients_data = validated_data.pop("ingredients")
tags_data = validated_data.pop("tags")
with transaction.atomic():
recipe = Recipe.objects.create(**validated_data)
recipe.tags.set(tags_data)
recipe_ingredients = [
RecipeIngredient(
recipe=recipe,
ingredient=ingredient_data["ingredient"],
amount=ingredient_data["amount"],
)
for ingredient_data in ingredients_data]
RecipeIngredient.objects.bulk_create(recipe_ingredients)
return recipe
我的模特们在这里
class Ingredient(models.Model):
ingredient_name = models.CharField(max_length=MAX_LENGTH_200)
measurement_unit = models.CharField(max_length=MAX_LENGTH_200)
class Recipe(models.Model):
ingredients = models.ManyToManyField(Ingredient, through="RecipeIngredient", related_name="recipes")
tags = models.ManyToManyField(Tag, related_name="recipes")
author = models.ForeignKey(User, on_delete=models.CASCADE, related_name="recipes")
recipe_name = models.CharField(max_length=MAX_LENGTH_200)
image = models.ImageField(upload_to="recipes/images/")
text = models.TextField()
cooking_time = models.PositiveIntegerField(validators= [MinValueValidator(1),MaxValueValidator(50000)])
class RecipeIngredient(models.Model):
recipe = models.ForeignKey(Recipe, on_delete=models.CASCADE,
related_name="recipe_ingredients")
ingredient = models.ForeignKey(Ingredient,
on_delete=models.CASCADE, related_name="ingredients")
amount = models.PositiveIntegerField()
我无法理解问题可能是什么,我试图在ModelSerializer的帮助下在通常的序列化器和上述序列化器上编写,但我得到了同样的错误。
在这种情况下,如果重要的话,使用django 3.2.25。
如有任何帮助,我将不胜感激