Django queryset order_by两列的值更大

时间:2014-09-02 15:14:49

标签: sql django django-models django-orm

我有以下Django模型:

class Entry(models.Model):
      date_entered = models.DateTimeField(auto_now_add=True)
      date_renewed = models.DateTimeField(blank=True,null=True)
创建Entry对象并将date_renewed字段设置为Null时,将自动填充

date_enterd。有些条目得到更新,有些则没有(这意味着某些条目将设置日期时间,有些条目将始终为空)。

我需要按照两者的最近时间对查询集进行排序,因为如果更新了旧条目,它应该是查询集中的第一个对象,但是当添加新条目时,更新的条目应该转到第二名。

参赛作品应按以下方式退回:

ID   DateEntered                         DeteRenewed 
55   2014-09-02 13:39:37.698422+00:00    None
45   2014-08-06 00:00:00+00:00           2014-08-31 11:43:05.339902+00:00
54   2014-08-31 00:00:00+00:00           None
43   2014-08-06 00:00:00+00:00           2014-08-30 10:49:51.594024+00:00
51   2014-08-15 00:00:00+00:00           2014-08-29 10:49:51.594024+00:00

我尝试过使用:

qs.extra(select={"sort_order":"COALESC(date_entered,date_renewed)"}, order_by=["-sort_order"])

但这不起作用,因为它选择了第一个非Null值。

我在开发中使用Postgres,在开发中使用SQLite。如果可能的话,我想坚持使用Django的ORM。

如何按上面指定的顺序排序查询集?

1 个答案:

答案 0 :(得分:0)

如果按照Paulo Almeida的指示交换列的顺序,则COALESCE可以工作。 保罗也正确地指出,提出的解决方案不会起作用。[/ p>

解决方案是:

qs.extra(select={"sort_order":"COALESC(date_renewed,date_entered)"}, order_by=["-sort_order"])