Как отсортировать набор запросов на основе двух полей в Django? - PullRequest
1 голос
/ 30 мая 2019

Это мой класс сериализатора:

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

Пожалуйста, помогите мне, если есть какой-либо способ сделать это?

1 Ответ

2 голосов
/ 30 мая 2019

Вы можете добавить поле с желаемым значением и затем упорядочить его. Кроме того, вам не нужно .all()

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