我需要按照desc顺序按日期命令一个Queryset,但我需要把最后的对象放到最后,我这样做:
qs1 = Model.objects.exclude(date=None).order_by('-date')
qs2 = Model.objects.filter(date=None).order_by('-date')
我的清单是:
l = list(qs1)+list(qs2)
有一种更有效的方法吗?
答案 0 :(得分:3)
Model.objects.extra(select={'nodate':'ISNULL(date)'}, order_by=['nodate', '-date'])
答案 1 :(得分:0)
那么,您正在寻找所有具有日期的对象......以及所有没有日期的对象?
这不会更好:
Model.objects.order_by('-date)
无论如何,这是一个很好的起点...阅读Django过滤器链接:http://docs.djangoproject.com/en/dev/topics/db/queries/#id1。
作为旁注,您的查询不是自行取消吗?
>>> d = MyModel.objects.filter(date=None).exclude(date=None).order_by('-date')
>>> d
[]
>>> d.query.get_compiler('default').as_sql()
('SELECT "date" FROM "table" WHERE ("table"."date" IS NULL AND NOT ("table"."date" IS NULL)) ORDER BY "table"."date" DESC', ())
我可能不明白你在问什么...