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放在後面

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