【问题标题】:How to sort queryset based on two fields in Django?如何根据 Django 中的两个字段对查询集进行排序?
【发布时间】:2019-05-30 19:04:42
【问题描述】:

这是我的序列化器类:

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

如果有办法请帮帮我?

【问题讨论】:

    标签: python django python-3.x django-rest-framework django-views


    【解决方案1】:

    您可以添加具有所需值的字段,然后按其排序。 另外,您不需要.all()

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

    【讨论】:

    • 谢谢,有帮助
    猜你喜欢
    • 2015-10-09
    • 1970-01-01
    • 2023-02-02
    • 1970-01-01
    • 2014-01-27
    • 2012-09-30
    • 2014-04-12
    • 1970-01-01
    • 2020-04-16
    相关资源
    最近更新 更多