我玩django-rest-framework,我会做以下事情:

from rest_framework import serializers

from .models import Author, Book


class BookSerializer(serializers.ModelSerializer):
    author = AuthorSerializer(many=False)

    class Meta:
        model = Book
        fields = ('slug', 'name')


class AuthorSerializer(serializers.ModelSerializer):
    books = BookSerializer(many=True)

    class Meta:
        model = Author
        fields = ('slug', 'name', 'books')

但是失败了。
NameError at /api/books/authors/
name 'AuthorSerializer' is not defined

有人帮忙吗?

最佳答案

导入文件时,其内容从上到下执行。因此,author = AuthorSerializer(many=False)行尝试在定义它之前实例化AuthorSerializer类。

即使您可以解决循环依赖问题,也将是错误的设计。每当序列化一个Author时,您都将包括其所有书籍的列表,而该列表又包括Author对象及其书籍列表。这将导致超出递归深度限制的另一个错误。

您需要决定要保持包含的序列化的方向:要在每个书籍序列化中使用完整的Author对象,还是要获得包含每个Author对象所有信息的书籍 list ?

然后可以使用任何形式的RelatedField as provided by the Django REST Framework包括反向关系。

07-28 00:39