我有以下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。
如何按上面指定的顺序排序查询集?
答案 0 :(得分:0)
如果按照Paulo Almeida的指示交换列的顺序,则COALESCE可以工作。 保罗也正确地指出,提出的解决方案不会起作用。[/ p>
解决方案是:
qs.extra(select={"sort_order":"COALESC(date_renewed,date_entered)"}, order_by=["-sort_order"])