小编him*_*229的帖子

根据请求类型更改Django REST Framework ModelSerializer中的字段?

考虑这种情况,我有一个BookAuthor模型.

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)

django django-serializer django-rest-framework

14
推荐指数
3
解决办法
1万
查看次数