Как объединить два набора запросов django в один? - PullRequest
0 голосов
/ 28 мая 2010

Мне нужно упорядочить 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 ]

3 голосов
/ 28 мая 2010
Model.objects.extra(select={'nodate':'ISNULL(date)'}, order_by=['nodate', '-date'])
0 голосов
/ 28 мая 2010

Итак, вы ищете все объекты, у которых есть дата ... и все объекты, у которых нет даты?

Разве это не сработает лучше:

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

Я, наверное, не понимаю, о чем вы спрашиваете ...

...