我玩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包括反向关系。