gpt4 book ai didi

python - 如何在 DRF 中对序列化程序自定义字段的值进行排序

转载 作者:太空宇宙 更新时间:2023-11-04 04:07:42 25 4
gpt4 key购买 nike

我在客户端序列化程序中创建了一个自定义字段。该字段的值是通过复杂的序列化器方法计算的。

class ClientsStatsSerializer(serializers.ModelSerializer):
"""
Serializer shows total_spend for 2019 by client.
"""
refs_count = serializers.SerializerMethodField()
total_spend_2019 = serializers.SerializerMethodField()

class Meta:
model = Company
ordering = ('total_spend_2019',)
fields = [
'id',
'legal_name',
'refs_count',
'total_spend_2019',
]
def get_total_spend_2019(self, obj):
...

我想按 total_spend_2019 的值对输出进行排序。看起来我不能在这里用一个简单的 ordering = ('total_spend_2019',) 我不能在模型中做,也不能在 View 中做。

编辑:拥有一个适用于任何 SerializerMethodField 的通用解决方案会很棒。

当前 View 是这样的:

class ClientsStatsViewSet(viewsets.ViewSet):
def list(self, request):
queryset = request.user.company.clients.all()

client_id = self.request.query_params.get('client_id', None)
if client_id is not None:
queryset = queryset.filter(pk=client_id)

serializer = ClientsStatsSerializer(queryset, many=True)
return Response(serializer.data)

知道如何解决这个问题吗?

非常感谢!!

最佳答案

好吧,我设法用以下方法解决了它:

class ClientsStatsViewSet(viewsets.ViewSet):
def list(self, request):
queryset = request.user.company.clients.all()

client_id = self.request.query_params.get('client_id', None)
if client_id is not None:
queryset = queryset.filter(pk=client_id)

serializer = ClientsStatsSerializer(queryset, many=True)
serializer_data = sorted(
serializer.data, key=lambda k: k['total_spend_2019'], reverse=True)
return Response(serializer_data)

我不知道这样做是否是最高效的方式,但它确实有效。

关于python - 如何在 DRF 中对序列化程序自定义字段的值进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56942068/

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