Python 如何用相同的模型嵌套两个序列化程序

Python 如何用相同的模型嵌套两个序列化程序,python,django,python-3.x,django-rest-framework,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 = BookSerializ

我有两个相同型号的序列化程序。我想把它们安顿起来

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

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')
预期结果:

{
  "id": 123,
  "book": {
    "name": "book_name",
    "word_count": 123
  }
}

您可以实现如下所示的期望输出:

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

class BetterBookSerializer(serializers.ModelSerializer):
    book = serializers.SerializerMethodField(read_only=True)

    class Meta:
         model = Book
         fields = ('id', 'book')

    def get_book(self, obj):
         return BookSerializer(obj).data
小更新: 虽然我解决您问题的方法很好,但@JPG提到
source='*'
选项的答案是一个很好的方法。通过这种方式,您可以在创建新对象时轻松地使用嵌套序列化程序。

使用而不是
many=True

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

    class Meta:
        model = Book
        fields = ('id', 'book')
class BetterBookSerializer(serializers.ModelSerializer):
book=BookSerializer(源='*')
类元:
模型=书
字段=('id','book')

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


不起作用
-会发生什么?如何将json数据转换为已验证的数据?需要转换什么json?你是说当你在创作新书的时候?是的,我需要它同时起作用。将模型对象转换为json时,以及从json创建新对象时。这正是我要搜索的。非常感谢!简单胜于复杂;)