如何嵌套两个具有相同型号的序列化程序

Nut*_*uts 4 python django python-3.x django-rest-framework

我有两个相同型号的序列化器。我想嵌套它们。

不幸的是,这种方法不起作用:

class BookSerializer(serializers.ModelSerializer):
    class Meta:
        model = Book
        fields = ['name', 'word_count']


class BetterBookSerializer(serializers.ModelSerializer):
    book = BookSerializer(many=False)

    class Meta:
        model = Book
        fields = ('id', 'book')
Run Code Online (Sandbox Code Playgroud)

预期结果:

{
  "id": 123,
  "book": {
    "name": "book_name",
    "word_count": 123
  }
}
Run Code Online (Sandbox Code Playgroud)

JPG*_*JPG 9

使用source=*代替many=True作为

class BetterBookSerializer(serializers.ModelSerializer):
    book = BookSerializer(source='*')

    class Meta:
        model = Book
        fields = ('id', 'book')
Run Code Online (Sandbox Code Playgroud)

从文档中

该值source='*'具有特殊含义,用于指示应将整个对象传递到该字段。这对于创建嵌套表示或需要访问完整对象以确定输出表示的字段非常有用。