一尘不染

Django按日期排序,但末尾没有“ None”吗?

django

我有一个工作单模型,其中包含何时需要工作单的字段。为了获得工作单的列表,以及那些需要提前完成的工作单,我这样做:

wo = Work_Order.objects.order_by('dateWORequired')

这很好用,但是只有在该字段中确实有一个值的情况下才可以。如果没有必需的日期,则值为None。然后,工作单列表的所有None顶部都带有,然后按正确的顺序排列其余的工作单。

如何None在底部找到?


阅读 410

收藏
2020-04-02

共2个答案

一尘不染

q = q.extra(select={
        'date_is_null': 'dateWORequired IS NULL',
    },
    order_by=['date_is_null','dateWORequired'],
)

你可能需要在order_by部分的date_is_null之前加一个-,但这是控制行为的方式。

2020-04-02
一尘不染

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))
2020-04-02