Я ударил головой об этой проблеме и знаю, что мне нужно пропустить что-то простое.Сегментация отношений структуры Django REST
Я пытаюсь изучить Django REST Framework и проблемы с настройкой внешних ключей нового объекта на существующие другие объекты при отправке JSON на сервер.
models.py
class Genre(models.Model):
name = models.CharField(max_length=200)
class Author(models.Model):
first_name = models.CharField(max_length=200)
last_name = models.CharField(max_length=200)
def full_name(self):
return self.first_name + ' ' + self.last_name
class Book(models.Model):
title = models.CharField(max_length=200)
genre = models.ForeignKey(Genre)
isbn = models.CharField(max_length=15, default='')
summary = models.CharField(max_length=500, null=True)
author = models.ForeignKey(Author)
serializers.py
class AuthorSerializer(serializers.ModelSerializer):
class Meta:
model = Author
fields = ('id', 'first_name', 'last_name',)
class GenreSerializer(serializers.ModelSerializer):
class Meta:
model = Genre
fields = ('id', 'name',)
class BookSerializer(serializers.ModelSerializer):
author = AuthorSerializer(read_only=True)
genre = GenreSerializer(read_only=True)
class Meta:
model = Book
fields = ('id','url', 'author', 'genre', 'title', 'isbn', 'summary',)
То, что я пытаюсь это создать новую книгу, связанную с существующейAuthor
и Genre
. Таким образом, учитывая некоторые JSON как
{"title": "Title",
"author": {"id":1}
"genre" : {"id":2}
...
}
Я хочу, чтобы создать новую книгу и иметь Genre
и Author
набор для соответствующих субъектов, которые уже находятся в базе данных.
Я попытался изменить author
и genre
поля на BookSerializer
в serializers.PrimaryKeyRelatedField()
и мытой документы и поэтому для ответов, в том числе this one. Я попытался изменить поля в JSON на "author": 1
или "genre_id": 2
, но я не могу заставить его работать. Я продолжаю получать django.db.utils.IntegrityError: books_book.genre_id may not be NULL
.
Я использую DRF ModelViewSet
для просмотра, если это имеет значение.
Что мне здесь не хватает?