Django rest framework Проблема с сериализатором Save()

Здравствуйте, я новичок в django и django rest framework и у меня возникла проблема при использовании сериализаторов с PrimarayKeyTelatedFields() код ниже это мой код для моего models.py

from django.db import models
class Author(models.Model):
    name = models.CharField(max_length=50)
    age = models.IntegerField(default=0)


class Book(models.Model):
    name = models.CharField(max_length=40)
    author = models.ForeignKey(to=Author, on_delete=models.CASCADE)

Ниже приведен код моего сериализатора from rest_framework import serializers

from books.models import Book, Author
class BookSerializer(serializers.ModelSerializer):
    author_id = serializers.PrimaryKeyRelatedField(many=False,
                                                   queryset=Author.objects.all())

    class Meta:
        model = Book
        fields = ['id', 'name', 'author_id']


class AuthorSerializer(serializers.ModelSerializer):
    class Meta:
        model = Author
        fields = ['id', 'name', 'age']

и когда я пытаюсь выполнить следующие команды в shell

>>from books.api.serializers import BookSerializer, AuthorSerializer
>> play1 = BookSerializer(data = { 'author_id':1 ,'name':'book1' })
>>play1.is_valid()
True
>>play1.save()

После выполнения вышеуказанного я получил огромную ошибку, как я вставил ниже

вы передали сюда объект вместо id...

 author_id = serializers.PrimaryKeyRelatedField(many=False,
                                               queryset=Author.objects.all())

вы должны передать идентификатор следующим образом

 author_id = serializers.PrimaryKeyRelatedField(many=False,
                                               queryset=Author.objects.get(id=request.user.id))

Помните, что бы вы ни запрашивали, это должно быть значение int, а не str или object

Причина

Проблема возникает при установке author_id с serializer.PrimaryKeyRelatedField

Пояснение

Django будет внутренне автоматически создавать атрибут для связанных полей (ForeignKey, OneToOneField, ...) с суффиксом _id, добавляющимся к объявленному имени поля. Тип данных этого поля - число. В этом случае поле author в Book будет иметь атрибут author_id. Проблема возникает из-за того, что serializer.PrimaryKeyRelatedField возвращает экземпляр модели в подтвержденных данных сериализатора, в результате чего поле author_id будет установлено в экземпляр Author. В результате возникает ошибка.

Решение

Переименовать атрибут author_id в author.

class BookSerializer(serializers.ModelSerializer):
    author = serializers.PrimaryKeyRelatedField(queryset=Author.objects.all())

    class Meta:
        model = Book
        fields = ['id', 'name', 'author']
Вернуться на верх