如何将两个django查询集合在一起?

时间:2010-05-27 22:18:10

标签: django django-models django-queryset

我需要按照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)

有一种更有效的方法吗?

2 个答案:

答案 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', ())

我可能不明白你在问什么...