如何按特定规则订购django

时间:2017-10-19 11:59:12

标签: python mysql django python-3.x

我想通过这条规则在django中订购我的对象:

  • 所有characters is_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

只使用一个查询来执行此操作

1 个答案:

答案 0 :(得分:3)

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

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

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

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