Python 如何根据Django中的两个字段对queryset进行排序?
这是我的系列化课程:Python 如何根据Django中的两个字段对queryset进行排序?,python,django,python-3.x,django-rest-framework,django-views,Python,Django,Python 3.x,Django Rest Framework,Django Views,这是我的系列化课程: class RankNewsChannelSerializers(serializers.ModelSerializer): class Meta: model = News_Channel fields = ('id', 'name','total_star', 'total_user') 我的看法是: class NewsChannelRankApi(ListAPIView): queryset = News_Chann
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
我得到的响应是根据总星数
排序的,如下所示:
[
{
"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\u star/total\u user
对响应进行排序。
这是我的无效方法,但它会让你大致了解我想要实现的目标
class NewsChannelRankApi(ListAPIView):
queryset = News_Channel.objects.order_by('-total_star/total_user').all()
serializer_class = RankNewsChannelSerializers
如果还有其他方法,请帮助我?您可以添加一个具有所需值的字段,然后按其排序。 此外,您不需要
.all()
queryset=News\u Channel.objects\
.annotate(每个用户的星数=F('total星数')/F('total星数'))\
.order_by('-stars_per_user'))
谢谢,这很有帮助