Предоставьте фильтры представлениям, просто повторно используя ранее созданные классы администратора.

Административные фильтры Django довольно крутые, и использование SimpleListFilter расширяет базовые фильтры по полям. Вот краткий пример, чтобы запомнить, как они работают:

Но знаете ли вы, что мы можем сделать с ними намного больше? Как насчет того, чтобы использовать их в своих представлениях, чтобы обеспечить фильтрацию вашего проекта за пределами административного интерфейса Django?

Пара простых изменений необходима для того, чтобы это работало должным образом.

Начните с вашего SimpleListFilter, переместив ваш lookups в метод класса, потому что нам нужно будет получить их без экземпляра вашего класса.

Это связано с Form, который мы должны иметь, который будет динамически создавать свои собственные поля на основе предоставленных ему фильтров.

Теперь представление, к которому мы хотим применить фильтры, должно использовать эту форму и наследоваться от миксина, который может получать фильтры из GET параметров и использовать их в QuerySet.

Наконец, добавив форму в наш шаблон и установив метод отправки на GET, форма должна отображаться правильно, и всякий раз, когда она отправляется, результаты будут фильтроваться в соответствии с выбранными параметрами, как в примере ниже.

Это действительно простой пример фильтров. Лично я добавил фильтры для отношений с ForeignKeys, диапазонами дат, годами и месяцами и многим другим. Я оставляю этот вызов вам, но если вам нужна помощь, оставьте комментарий, и я постараюсь ответить на него, насколько мне известно 😄

Весь показанный и объясненный здесь исходный код (примеси, функции, примеры, примеры и т. д.) доступен в репозитории GitHub ниже вместе с другими полезными проектами, которые я разработал и о которых писал. Не стесняйтесь проверить это, использовать их в своей работе и помочь мне улучшить их своими отзывами.



🍋 🍋 🍋