Django | Сериализатор для внешних ключей
У меня есть две модели Book и Author, реализованные следующим образом:
class Author(models.Model):
name = models.CharField(max_length=50)
class Book(models.Model):
name = models.CharField(max_length=50)
author = models.ForeignKey(Author, on_delete=models.CASCADE)
В дополнение к этому я получил следующие сериализаторы:
class AuthorSerializer(serializers.Serializer):
id = serializers.IntegerField(read_only=True)
name = serializers.CharField(max_length=50)
class BookSerializer(serializers.Serializer):
id = serializers.IntegerField(read_only=True)
name = serializers.CharField(max_length=50)
author = AuthorSerializer()
Сериализация объектов работает без проблем.
Теперь у меня следующая ситуация:
Авторские:
id | name |
---|---|
1 | Josh Robert |
2 | J. R. R. Tolkien |
3 | Mike Towers |
Я получаю POST запрос к конечной точке API на моем сервере
http://127.0..0.1:8000/api/book
выглядит следующим образом:
payload = {
'name': 'Lord of the rings',
'author': 2
}
Как я могу использовать мои сериализаторы для создания новой книги с заданным именем и связать ее с автором no. 2?
Вы можете добавить поле user_id
для записи в BookSerializer
.
Кстати, вам не нужно задавать поле id
. Django автоматически разберется с полем id
, если вы выводите его из serializers.ModelSerializer
.
class AuthorSerializer(serializers.ModelSerializer):
name = serializers.CharField(max_length=50)
class Meta:
fields = '__all__'
Model = Author
class BookSerializer(serializers.ModelSerializer):
author_id = serializers.IntegerField(write_only=True)
name = serializers.CharField(max_length=50)
author = AuthorSerializer(read_only = True)
class Meta:
fields = ('id', 'name', 'author', 'author_id',)
Model = Book
А во фронтенде полезная нагрузка должна быть
{
'name': 'Lord of the rings',
'author_id': 2
}