考虑这种情况,我有一个Book和Author模型.
serializers.py
class AuthorSerializer(serializers.ModelSerializer):
class Meta:
model = models.Author
fields = ('id', 'name')
class BookSerializer(serializers.ModelSerializer):
author = AuthorSerializer(read_only=True)
class Meta:
model = models.Book
fields = ('id', 'title', 'author')
Run Code Online (Sandbox Code Playgroud)
viewsets.py
class BookViewSet(viewsets.ModelViewSet):
queryset = Book.objects.all()
serializer_class = BookSerializer
Run Code Online (Sandbox Code Playgroud)
如果我发送GET书籍请求,这很有用.我得到一个带有嵌套序列化程序的输出,其中包含书籍详细信息和嵌套作者详细信息,这就是我想要的.
然而,当我要创建/更新的一本书,我要送一POST/ PUT/ PATCH与作者而不只是它们的ID的嵌套的细节.我希望能够通过指定作者ID而不是整个作者对象来创建/更新书籍对象.
所以,我的序列化器看起来像这样的GET请求
class BookSerializer(serializers.ModelSerializer):
author = AuthorSerializer(read_only=True)
class Meta:
model = models.Book
fields = ('id', 'title', 'author')
Run Code Online (Sandbox Code Playgroud)
和我的串行器看起来像这样的POST,PUT,PATCH请求
class BookSerializer(serializers.ModelSerializer):
author = …Run Code Online (Sandbox Code Playgroud)