gpt4 book ai didi

python - 将 URL 参数传递给嵌套序列化器

转载 作者:行者123 更新时间:2023-12-01 04:17:27 25 4
gpt4 key购买 nike

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

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

我想获取仅显示他们已发表论文的作者列表(模型中存在 bool 字段)。

我想调用 /api/v1/authors/?show_published_only=true 等 API。

最佳答案

经过一番挖掘,我发现您可以将上下文从 ViewSet 传递到序列化器:

views.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

class FilteredPaperSerializer(serializers.ListSerializer):
def to_representation(self, data):
# Get the parameter from the URL
show_published_only = self.context['request'].query_params['show_published_only']

data = data.filter(is_published=show_published_only)
return super(FilteredPaperSerializer, self).to_representation(data)

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

class Meta:
model = Author

注意:不要忘记将获取的 URL 参数转换为 bool 值或模型的相关数据类型,我在上面的文章中忽略了这一点。

关于python - 将 URL 参数传递给嵌套序列化器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34166152/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com