我有一个查询集,我按-DateTimeField
排序模特:
class QuestSubmission(models.Model):
quest = models.ForeignKey(Quest)
user = models.ForeignKey(settings.AUTH_USER_MODEL,
...
time_returned = models.DateTimeField(null=True, blank=True)
查询集:
QuestSubmission.objects.all().order_by('-time_returned')
在我的sqlite3测试中,此顺序最新到最旧,然后是None / Null条目
但是在我的Postgresql服务器上,顺序是None / Null,然后是最新到最旧的。
如何让我的postgresql order_by将None / Null值放在末尾,类似于sqlite3?
答案 0 :(得分:0)
这样的事情应该有效。
select * from dude order by case when date is null then 1 else 0 end, date desc;
test | date
-------+------------
test2 | 2001-01-04
test2 | 2001-01-03
test2 | 2001-01-02
test2 | 2001-01-01
test |
test2 |
示例:
from django.db.models import Case, When, Value, IntegerField
SomeModel.objects.annotate(
nulls_last=Case(
When(time_returned__is_null=True, then=Value(1)),
When(time_returned__is_null=False, then=Value(0)),
output_field=IntegerField(),
)
).order_by('nulls_last', '-time_returned')