При использовании общего списка Django тот же набор запросов используется для генерации paginator.count
и object_list
.Это имеет смысл, поскольку любая фильтрация должна отражаться в счетчике и в списке отображаемых объектов.Однако при добавлении аннотаций к набору запросов, которые не используются в фильтре, запрос подсчета без необходимости включает в себя эту дополнительную сложность.
Я заметил некоторые случаи, когда планировщик PostgreSQL достаточно умен, чтобы не выполнять эти аннотации,но я также видел, что запросы требуют такой же работы, когда запрос подсчета может быть значительно упрощен.
Мне интересно, сталкивался ли кто-нибудь с этим и нашел ли это обходной путь.
У меня былследующие идеи:
переопределить общий вид списка и нумератор страниц, чтобы использовать count_queryset
в CBV
переопределить общий вид списка иpaginator для удаления любых аннотаций из предоставленного набора запросов перед подсчетом счетчика
Я использую Django 1.11.4 и PostgreSQL 11.2.