我有两个型号
class Book(models.Model):
name = models.CharField(max_length=50)
author = models.ForeignKey(Author)
class Author(models.Model):
name = models.CharField(max_length=50)
然后按如下所示创建prefetch_related
查询集
Author.objects.all().prefetch_related("book_set")
然后为Author
创建一个序列化器,并且book_set
像这样添加到序列化器字段中
class AuthorSerial(serializers.ModelSerializer):
class Meta:
model = Author
fields = ('name' ,'book_set')
但是这只会返回书籍ID的列表作为嵌套的序列化程序,而不会返回带有它的其余数据,例如下面的名称。
{
name:'john',
book_set:[1,2,3]
}
有什么方法可以解决此问题,以获取数据为
name:'john',
book_set:[{id:1,name:'Book 1'},{id:2,name:'Book 2'},{id:3,name:'Book 3'}]
}
如果必须进一步过滤这些预取,该怎么办
您需要为书本模型使用单独的序列化程序。像这样的东西:
class BookSerializer(serializers.ModelSerializer):
class Meta:
model = Book
fields = '__all__'
class AuthorSerial(serializers.ModelSerializer):
book_set = BookSerializer()
class Meta:
model = Author
fields = ('name' ,'book_set')
通常,外键和多对多关系总是要求另一个模型具有自己的序列化程序,否则您将只获得ID列表。