【发布时间】:2015-12-13 03:14:13
【问题描述】:
我一直在努力解决这个问题,并且知道我必须遗漏一些简单的东西。
我正在尝试学习 Django REST 框架,但在将 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 设置为数据库中已有的相应实体。
我尝试将BookSerializer 上的author 和genre 字段更改为serializers.PrimaryKeyRelatedField(),并搜索了文档和SO 以寻找答案,包括this one。我尝试将 JSON 中的字段更改为 "author": 1 或 "genre_id": 2,但我似乎无法让它工作。我不断收到django.db.utils.IntegrityError: books_book.genre_id may not be NULL。
如果有影响,我将使用 DRF ModelViewSet 获取视图。
我在这里错过了什么?
【问题讨论】:
标签: python django django-rest-framework