django 自定义排序
2020-03-30 本文已影响0人
butters001
今天遇到个自定义排序场景 按 status 不规则排序
平时只用到 order_by("status") 或 order_by("-status")
status 有 0, 1, 2 三种类型
传统只能 012 顺序 或 210 倒序
现在想按 [0, 2, 1] 或 [1, 0, 2] 等自定义排序
解决方法如下
# 按 0 2 1排序
result = models.objects.all()
order_by = [0, 2, 1]
ordering = 'FIELD(`status`, %s)' % ','.join(str(status) for status in order_by)
result = result.extra(select={'ordering': ordering}, order_by=('ordering', ))