gpt4 book ai didi

python - 如何根据 Django 中的两个字段对查询集进行排序?

转载 作者:行者123 更新时间:2023-12-01 00:53:40 25 4
gpt4 key购买 nike

这是我的序列化器类:

class RankNewsChannelSerializers(serializers.ModelSerializer):
class Meta:
model = News_Channel
fields = ('id', 'name','total_star', 'total_user')

这是我的观点:

class NewsChannelRankApi(ListAPIView):
queryset = News_Channel.objects.order_by('-total_star').all()
serializer_class = RankNewsChannelSerializers

我收到的回复已根据 total_stars 进行排序,如下所示:

[
{
"id": 9,
"name": "The Hindu",
"total_star": 36,
"total_user": 5
},
{
"id": 1,
"name": "NDTV",
"total_star": 36,
"total_user": 5
},
{
"id": 10,
"name": "Firstpost",
"total_star": 35,
"total_user": 6
},
{
"id": 14,
"name": "DD News",
"total_star": 25,
"total_user": 4
}
]

但我需要按 total_star/total_user 对响应进行排序。就像这是我的无效方法,但它会让您大致了解我想要实现的目标。

class NewsChannelRankApi(ListAPIView):
queryset = News_Channel.objects.order_by('-total_star/total_user').all()
serializer_class = RankNewsChannelSerializers

如果有什么办法请帮助我?

最佳答案

您可以添加一个包含所需值的字段,然后按它进行排序。另外,您不需要 .all()

    queryset = News_Channel.objects \
.annotate(stars_per_user=F('total_star')/F('total_user')) \
.order_by('-stars_per_user')

关于python - 如何根据 Django 中的两个字段对查询集进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56384210/

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