Получаю ошибку TypeError: int() argument must be a string, a bytes-like object or a number, not 'RelatedManager' при POST запросе к API

У меня есть сериалайзер для создания рецепта. При POST запросе на соответствующий адрес получаю ошибку TypeError: int() argument must be a string, a bytes-like object or a number, not 'RelatedManager' При этом объект создается, записи в таблицы записываются. В чем может быть дело?

class RecipesCreateSerializer(serializers.ModelSerializer):
    author = CustomUserSerializer(read_only=True)
    ingredients = IngredientWriteSerializer(many=True)
    tags = serializers.PrimaryKeyRelatedField(queryset=Tags.objects.all(),
                                              many=True)

    def create_tags(self, tags, recipes):
        for tags in tags:
            recipes.tags.add(tags)

    def create(self, validated_data):
        ingredients_data = validated_data.pop('ingredients')
        tags = validated_data.pop('tags')

        new_recipes = Recipes.objects.create(**validated_data)

        for data in ingredients_data:
            ingr = get_object_or_404(Ingredients, pk=data['id'])
            amount = data['amount']
            IngredientsAmount.objects.create(recipes=new_recipes,
                                             ingredients=ingr,
                                             amount=amount)
        self.create_tags(recipes=new_recipes,
                         tags=tags)

        return new_recipes

    class Meta:
        model = Recipes
        fields = ('author',
                  'ingredients',
                  'tags',
                  'image',
                  'name',
                  'text',
                  'cooking_time')

связанный сериалайзер

class IngredientWriteSerializer(serializers.Serializer):
    id = serializers.IntegerField()
    amount = serializers.IntegerField()

Модели:

class Recipes(models.Model):
    author = models.ForeignKey(CustomUser,
                               on_delete=models.CASCADE,
                               db_index=True,
                               related_name='recipes',
                               verbose_name='Автор рецепта'
                               )
    ingredients = models.ManyToManyField(Ingredients,
                                         through='IngredientsAmount',
                                         related_name='recipes',
                                         verbose_name='Ингредиенты')
    tags = models.ManyToManyField(Tags,
                                  # through='RecipesTags',
                                  related_name='recipes_tags',
                                  verbose_name='Теги')
    name = models.CharField(max_length=200, db_index=True,
                            verbose_name='Название рецепта')
    image = models.ImageField(upload_to='recipes/', blank=True,
                              verbose_name='Загрузить фото')
    text = models.TextField(verbose_name='Описание')
    cooking_time = models.PositiveIntegerField(
        validators=[MinValueValidator(1, 'Установите не меньше 1 минуты'), ],
        verbose_name='Время приготовления')

    def __str__(self):
        return self.name

    class Meta:
        verbose_name = 'Рецепт'
        verbose_name_plural = 'Рецепты'
        ordering = ('-id',)


class IngredientsAmount(models.Model):
    ingredients = models.ForeignKey(Ingredients,
                                    on_delete=models.CASCADE,
                                    related_name='amount',
                                    verbose_name='Ингредиенты', )
    recipes = models.ForeignKey(Recipes,
                                on_delete=models.CASCADE,
                                related_name='amount',
                                verbose_name='Рецепты', )
    amount = models.IntegerField()

    def __str__(self):
        return self.amount

    class Meta:
        constraints = [
            models.UniqueConstraint(
                fields=['ingredients', 'recipes'],
                name='unique_ingredients_in_recipes'
            )
        ]
        verbose_name = 'Количество ингредиента'
        verbose_name_plural = 'Количество ингредиентов'

Трейсбек ошибки

Internal Server Error: /api/recipes/
Traceback (most recent call last):
  File "/home/vladimir/Dev/foodgram-project-react/venv/lib/python3.8/site-packages/django/core/handlers/exception.py", line 34, in inner
    response = get_response(request)
  File "/home/vladimir/Dev/foodgram-project-react/venv/lib/python3.8/site-packages/django/core/handlers/base.py", line 115, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "/home/vladimir/Dev/foodgram-project-react/venv/lib/python3.8/site-packages/django/core/handlers/base.py", line 113, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/home/vladimir/Dev/foodgram-project-react/venv/lib/python3.8/site-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
    return view_func(*args, **kwargs)
  File "/home/vladimir/Dev/foodgram-project-react/venv/lib/python3.8/site-packages/rest_framework/viewsets.py", line 125, in view
    return self.dispatch(request, *args, **kwargs)
  File "/home/vladimir/Dev/foodgram-project-react/venv/lib/python3.8/site-packages/rest_framework/views.py", line 509, in dispatch
    response = self.handle_exception(exc)
  File "/home/vladimir/Dev/foodgram-project-react/venv/lib/python3.8/site-packages/rest_framework/views.py", line 469, in handle_exception
    self.raise_uncaught_exception(exc)
  File "/home/vladimir/Dev/foodgram-project-react/venv/lib/python3.8/site-packages/rest_framework/views.py", line 480, in raise_uncaught_exception
    raise exc
  File "/home/vladimir/Dev/foodgram-project-react/venv/lib/python3.8/site-packages/rest_framework/views.py", line 506, in dispatch
    response = handler(request, *args, **kwargs)
  File "/home/vladimir/Dev/foodgram-project-react/venv/lib/python3.8/site-packages/rest_framework/mixins.py", line 20, in create
    headers = self.get_success_headers(serializer.data)
  File "/home/vladimir/Dev/foodgram-project-react/venv/lib/python3.8/site-packages/rest_framework/serializers.py", line 548, in data
    ret = super().data
  File "/home/vladimir/Dev/foodgram-project-react/venv/lib/python3.8/site-packages/rest_framework/serializers.py", line 246, in data
    self._data = self.to_representation(self.instance)
  File "/home/vladimir/Dev/foodgram-project-react/venv/lib/python3.8/site-packages/rest_framework/serializers.py", line 515, in to_representation
    ret[field.field_name] = field.to_representation(attribute)
  File "/home/vladimir/Dev/foodgram-project-react/venv/lib/python3.8/site-packages/rest_framework/serializers.py", line 663, in to_representation
    return [
  File "/home/vladimir/Dev/foodgram-project-react/venv/lib/python3.8/site-packages/rest_framework/serializers.py", line 664, in <listcomp>
    self.child.to_representation(item) for item in iterable
  File "/home/vladimir/Dev/foodgram-project-react/venv/lib/python3.8/site-packages/rest_framework/serializers.py", line 515, in to_representation
    ret[field.field_name] = field.to_representation(attribute)
  File "/home/vladimir/Dev/foodgram-project-react/venv/lib/python3.8/site-packages/rest_framework/fields.py", line 963, in to_representation
    return int(value)
TypeError: int() argument must be a string, a bytes-like object or a number, not 'RelatedManager'
[17/Jul/2022 13:20:57] "POST /api/recipes/ HTTP/1.1" 500 20320

Ответы (1 шт):

Автор решения: ACC
tags = serializers.PrimaryKeyRelatedField(queryset=Tags.objects.all(),
                                              many=True)

Данный код кажется мне странным. Разве сериализатор не должен автоматически делать подобную операцию без необходимости в явном указании типа поля ? Попробуйте убрать эту строчку.

Так-же возможно, стоит обратить внимение на ManyRelatedField, но я совсем не уверен.

2.

class IngredientWriteSerializer(serializers.Serializer):
    id = serializers.IntegerField()
    amount = serializers.IntegerField()

Почему так ? Разве это не будет правильно решить при помощи:

class IngredientWriteSerializer( serializers.ModelSerializer ):
    class Meta:
        model = Ingredients
        fields = ( 'pk', 'amount' )
→ Ссылка