У меня есть ListView в Django, метод get_queryset() иногда должен возвращать никаких результатов. Я попробовал три способа сделать это:Пустые запросы в Django
return EmptyQuerySet()
return Model.objects.none()
return Model.objects.filter(pk=-1)
Каждый из этих возвращает несколько иной объект.
django.db.models.query.EmptyQuerySet
с атрибутом модели установлен вNone
django.db.models.query.EmptyQuerySet
с моделью набор атрибутов дляModel
django.db.models.query.QuerySet
с моделью набор атрибутов дляModel
Только третий вариант работы с классом основанный на ListView. Другие параметры обрушиваются на ошибку атрибута, когда ListView пытается получить доступ к атрибуту model. Это меня удивляет, и это боль, поскольку мне требуется импортировать модель в местах, где это может вызвать проблемы с MRO.
Что я делаю неправильно/что я должен делать по-другому?
Обновление: Вопрос в том, является ли правильный способ вернуть пустой запрос с помощью метода представления класса get_queryset()
?
Update: Вот строка в общих взглядах Джанго, который бьет ошибку атрибута при попытке получит доступ к model
атрибута: https://github.com/django/django/blob/stable/1.5.x/django/views/generic/list.py#L166.
Почему вы не можете использовать второй вариант, 'EmptyQuerySet' имеет атрибут модели в этом случае. –
Просто думая об этом, я думаю, что у вас неправильная установка логики, если вам нужно иметь пустой запрос в списке. Вы должны иметь возможность справиться с этим без сбоев или около того. –
@akshar: вы могли бы подумать, но Django по-прежнему выбрасывает ошибку Attribute в этой строке: https://github.com/django/django/blob/stable/1.5.x/django/views/generic/list.py#L166 – Erik