У меня есть базовый класс модели, который создает историю объекта каждый раз, когда объекты были изменены. Модель имеет поле с именем is_history. Идея состоит в том, что новый экземпляр модели создается со старыми данными каждый раз, когда модель была изменена кем-то. Новая модель со старыми данными имеет «is_history = True», потому что становится объектом истории. В администраторе изменений по умолчанию я не хочу видеть объекты истории. Я не хочу их видеть по умолчанию. Вот почему я создал нового менеджера, который перезаписывает значение по умолчанию get_query_set() и добавляет 'is_history = False'.Django QuerySet - как отключить предыдущее отфильтрованное значение
def get_query_set(self):
qs = super(ModelHistoryManager, self).get_query_set()
return qs.filter(is_history=False)
Но я также должен иметь возможность показывать объекты истории в списке изменений редко, используя, например, админ-фильтр.
Мой вопрос: у меня есть запрос, который уже отфильтровал это значение. Но в фильтре admin я получаю отфильтрованный запрос из базового менеджера, и я хочу изменить этот фильтр с is_history = False на is_history = True или удалить фильтр для 'is_history', если пользователь хочет показать все записи - обе истории и оригинальные записи.
Любая идея?
Почему бы вам не создать двух менеджеров? для администратора и не-администратора? –
Как фильтровать значения в администраторе таким образом? Администратор использует стандартный диспетчер объектов. Все это происходит в контексте администратора, а не в пользовательских представлениях. –
Да, я понимаю. почему бы не использовать пользовательский ящик в пользовательских представлениях? или, альтернативно, вы можете создать абстрактную модель и использовать ее в admin. расширьте его от исходного и переопределите в нем менеджер по умолчанию. –