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']