【问题标题】:How to ordering by specific rules django如何按特定规则订购 django
【发布时间】:2018-03-31 11:01:43
【问题描述】:

我想按照这条规则在 django 中排序我的对象:

  • 所有charactersis_sold == True 都必须在查询结果的末尾。

我使用两个查询来获取已售出和未售出的字符:

characters = list(Character.objects.all().filter(is_sold=False).order_by('server__ranking'))
characters += list(Character.objects.filter(is_sold=True).order_by('server__ranking'))

我可以使用order_by 仅使用一个查询来做到这一点

【问题讨论】:

    标签: python mysql django python-3.x


    【解决方案1】:

    您可以将多个字段传递给order_by

    characters = Character.objects.order_by('is_sold', 'server__ranking')
    

    已售出是否在未售出之前出现取决于您的数据库后端,因为某些数据库在True 之前订购False,而另一些则相反(请参阅this ticket)!所以你可能不得不这样做:

    characters = Character.objects.order_by('-is_sold', 'server__ranking')
    

    【讨论】:

    • 如果你使用order_by,就不需要all()
    猜你喜欢
    • 2011-06-05
    • 2014-11-16
    • 2013-06-30
    • 1970-01-01
    • 2013-04-13
    • 1970-01-01
    • 2018-03-04
    • 1970-01-01
    • 2014-06-20
    相关资源
    最近更新 更多