Отфильтрованные аннотации без удаления результатов

Рассмотрим модель и запрос с использованием аннотаций, например следующий пример из документации Django: http://docs.djangoproject.com/en/dev/topics/db/aggregation/

Publisher.objects.filter(book__rating__gt=3.0).annotate(num_books=Count('book'))

Результат этого запроса будет содержать только объекты, соответствующие фильтру (т. е. имеющие book_rating выше 3,0), и эти объекты были аннотированы. Но что, если я хочу, чтобы запрос содержал все объекты, но только аннотировал объекты, соответствующие фильтру (или, например, аннотировал их 0)? Или это вообще возможно?


person nip3o    schedule 10.02.2011    source источник


Ответы (1)


Нет, вы не можете этого сделать, потому что базовый SQL работает иначе.

Единственное, что я могу придумать, это сделать два запроса, один с фильтром/аннотацией и один без, а затем перебрать их в Python, добавив аннотацию к соответствующим объектам из нефильтрованного списка.

person Daniel Roseman    schedule 11.02.2011