2012-08-16 96 views
4

我有我的数据库中输入以下内容:复杂的排序

`title`   `status` 
Titanic   WIP 
Avatar    WIP 
Terminator   Complete 
Abyss    Default 

我想通过物体的状态,对这些对象进行排序:默认值,然后WIP,然后完成。然后正确的顺序是:

Abyss/Default 
Avatar/WIP 
Titanic/WIP 
Terminator/Complete 

我该怎么做下面的数据库调用?

Title.objects.order_by(status='Default', status='WIP', status='Complete',title) 
+3

http://stackoverflow.com/questions/10329849/django-order-by-specific-order – 2012-08-16 23:05:37

+0

谢谢你的! – David542 2012-08-16 23:17:14

+0

可能重复的[Django命令\ _特定顺序](https://stackoverflow.com/questions/10329849/django-order-by-specific-order) – 2017-08-08 12:07:29

回答

3

要做到这一点查询,你可以使用Django的extra

titles = Title.objects.all() 
ordered_query = titles.extra(select={ 
       'ordering':"(
        case when status='Default' then 1 
         when status='WIP' then 2 
         when status='Complete' then 3 
        end)" 
       }).order_by('ordering', 'title') 
+1

在Django ** 1.8 **您不必使用'额外'你可以使用[条件表达式](https://docs.djangoproject.com/en/1.8/ref/models/conditional-expressions/)请参阅这里:http://stackoverflow.com/a/31611225/953553 – andi 2015-07-24 13:43:51