django orm排序 空值在后

from django.db.models import Q,F
aQ = (Q(net_number__icontains=''))
demo.objects.filter(aQ).order_by(F('test_time').asc(nulls_last=True))[start:end].values()

其中test_time即为指定字段,asc为正序 传入参数nulls_last为True,查询结果即为空值在后。

其效果等同于:select * from demo where net_number like '%%' order by  test_time is NULL, test_time;

select * from demo where net_number like '%%' order by  if(isnull(test_time), 1, 0), test_time;

其中isnull函数中

将null强制放在前面:if(isnull(test_time), 0, 1)

asc默认是空值在前的,在desc默认是空值在后得,

如有需求,可以使用 0,1 将其放在前面;1,0放在后面

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章