Django Rest Framework:prefetch_related在序列化程序中无法正常工作

问题描述 投票:0回答:1

我有两个型号

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'}]

}

如果必须进一步过滤这些预取,该怎么办

django python-3.x django-rest-framework
1个回答
0
投票

您需要为书本模型使用单独的序列化程序。像这样的东西:

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列表。

© www.soinside.com 2019 - 2024. All rights reserved.