Ошибка атрибута при попытке создания модели

Я получил это сообщение об ошибке

Получили ошибку AttributeError при попытке получить значение для поля id на сериализаторе IngredientSerializer. Поле сериализатора может быть названо неверно и не соответствовать какому-либо атрибуту или ключу экземпляра Ingredient. Оригинальный текст исключения был: 'Ingredient' object has no attribute '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, если это имеет значение в данном случае. Буду благодарен за любую помощь

Вы используете recipe_ingredients в качестве источника для ingredients, а не ingredients, поэтому:

class CreateRecipeSerializer(serializers.ModelSerializer):
    ingredients = IngredientSerializer(many=True, source='recipe_ingredients')
    tags = serializers.PrimaryKeyRelatedField(
        queryset=Tag.objects.all(), many=True
    )
    image = serializers.ImageField(required=False)
    name = serializers.CharField(source='recipe_name')

    class Meta:
        model = Recipe
        fields = ['name', 'image', 'text', 'cooking_time', 'ingredients', 'tags']
Вернуться на верх