Предоставьте фильтры представлениям, просто повторно используя ранее созданные классы администратора.
Административные фильтры Django довольно крутые, и использование SimpleListFilter
расширяет базовые фильтры по полям. Вот краткий пример, чтобы запомнить, как они работают:
Но знаете ли вы, что мы можем сделать с ними намного больше? Как насчет того, чтобы использовать их в своих представлениях, чтобы обеспечить фильтрацию вашего проекта за пределами административного интерфейса Django?
Пара простых изменений необходима для того, чтобы это работало должным образом.
Начните с вашего SimpleListFilter
, переместив ваш lookups
в метод класса, потому что нам нужно будет получить их без экземпляра вашего класса.
Это связано с Form
, который мы должны иметь, который будет динамически создавать свои собственные поля на основе предоставленных ему фильтров.
Теперь представление, к которому мы хотим применить фильтры, должно использовать эту форму и наследоваться от миксина, который может получать фильтры из GET
параметров и использовать их в QuerySet
.
Наконец, добавив форму в наш шаблон и установив метод отправки на GET
, форма должна отображаться правильно, и всякий раз, когда она отправляется, результаты будут фильтроваться в соответствии с выбранными параметрами, как в примере ниже.
Это действительно простой пример фильтров. Лично я добавил фильтры для отношений с ForeignKey
s, диапазонами дат, годами и месяцами и многим другим. Я оставляю этот вызов вам, но если вам нужна помощь, оставьте комментарий, и я постараюсь ответить на него, насколько мне известно 😄
Весь показанный и объясненный здесь исходный код (примеси, функции, примеры, примеры и т. д.) доступен в репозитории GitHub ниже вместе с другими полезными проектами, которые я разработал и о которых писал. Не стесняйтесь проверить это, использовать их в своей работе и помочь мне улучшить их своими отзывами.
icarovirtual/lemoncode/adminfilters
для всех этих очень сочных фрагментов кодаgithub.com/icarovirtual
🍋 🍋 🍋