向嵌套serializ传递URL参数

2024-10-03 19:24:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个序列化程序,其中一个是嵌套的:

class PaperSerializer(serializers.ModelSerializer):

    class Meta:
        model = Paper


class AuthorSerializer(serializers.ModelSerializer):
    papers = PaperSerializer(
        many=True,
        read_only=True,
        source='paper_set'
    )

    class Meta:
        model = Author

我想得到一个作者列表,只显示他们发表的论文(模型上存在布尔域)。在

我想像/api/v1/authors/?show_published_only=true那样调用API。在


Tags: 程序trueonlyreadmodel序列化metamany
1条回答
网友
1楼 · 发布于 2024-10-03 19:24:51

经过一番挖掘,我发现可以将上下文从视图集传递到序列化程序:

视图.py

class AuthorViewSet(viewsets.ModelViewSet):
    queryset = Author.objects.all()
    serializer_class = AuthorSerializer
    filter_fields = (
        'show_published_only',
    )

    def get_serializer_context(self):
        return {'request': self.request}

现在,创建一个继承自serializers.ListSerializer的新序列化程序FilteredPaperSerializer,然后重写to_representation()方法来过滤查询集:

序列化程序.py

^{pr2}$

NB:别忘了将获取的URL参数转换为布尔值或与模型相关的数据类型,我在上面的文章中忽略了这一点。在

相关问题 更多 >