我有一个工作单模型,其中包含何时需要工作单的字段。为了获得工作单的列表,以及那些需要提前完成的工作单,我这样做:
wo = Work_Order.objects.order_by('dateWORequired')
这很好用,但是只有在该字段中确实有一个值的情况下才可以。如果没有必需的日期,则值为None。然后,工作单列表的所有None顶部都带有,然后按正确的顺序排列其余的工作单。
None
如何None在底部找到?
q = q.extra(select={ 'date_is_null': 'dateWORequired IS NULL', }, order_by=['date_is_null','dateWORequired'], )
你可能需要在order_by部分的date_is_null之前加一个-,但这是控制行为的方式。
Django 1.11将其添加为本机功能。这有点令人费解。它已记录在案。
仅按一个字段排序,升序:
wo = Work_Order.objects.order_by(F('dateWORequired').asc(nulls_last=True))
使用两个字段排序,都降序排列:
wo = Work_Order.objects.order_by(F('dateWORequired').desc(nulls_last=True), F('anotherfield').desc(nulls_last=True))