一、背景:
在我们开发过程中,有时候会遇到需要对指定数据库字段中的值按照某个自定义的顺序进行排序,如:查询结果需要按照status字段值['success', 'fail', 'delete']进行排序
二、如果是通过原生sql进行实现,那么可以如下实现
select * from tasks order by FIELD(status, 'success', 'fail', 'delete') asc;
三、那么如果是在Django中使用ORM,该怎么实现呢?
查找了很多文章博客,没有找到很好的方法,我最后通过了如下的方式进行代替实现:
task_list = Tasks.objects.filter(**params).annotate(
Status=Case(When(status='success', then=1),
When(status='fail', then=2),
When(status='delete', then=3),
default=Value(4),
output_field=IntegerField()
)
).order_by('Status')
以上是本人自己的实践,如果有任何疑问或者更好的建议欢迎评论联系,非常感谢~