Мне нужно было создать Django Admin list_view
страницу с переопределенным методом get_queryset()
, который будет объединять разные модели на одну и ту же страницу.
Но после того, как я обновил ее, list_filter
перестал работать.
Как я выяснил, если вы используете union()
- Django не позволяет выполнять дальнейшую фильтрацию (только LIMIT
, OFFSET
, COUNT(*)
, ORDER BY
SQL операций).
И почему-то применение этих фильтров реализовано после вызова get_queryset()
. Я думал, что вызов super().get_queryset(request)
в моем ModelAdmin.get_queryset()
вернет уже проанализированные данные.
UPD: В этой ситуации никакие работающие фильтры и набор запросов в действиях не всегда содержат все записи модели, даже если немногие выбрали только несколько.
class Model1():
pass
class ModelA():
x = models.ForeignKey(Model1)
class ModelB():
x = models.ForeignKey(Model1)
class Model1Admin():
list_display = (...)
list_filters = (...) # These will not work
list_actions = (...) # These will not work
def get_queryset():
qs_a = Model1.prefetch_related('ModelA')
qs_b = Model1.prefetch_related('ModelB')
return qs_a.union(qs_b)
Вопросы:
- Есть ли какой-нибудь простой способ, как получить набор запросов с уже примененным
list_filters
и после выполнения пользовательской фильтрации и объединения? - Это ошибка в Django Framework сама по себе, и об этом следует сообщать в их баг-трекере?