Это мой класс сериализатора:
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')
Спасибо, помогло