Фильтрация в Django-admin позволяет сузить набор отображаемых в административной панели объектов на основе заданных критериев. Django-admin предоставляет несколько способов настройки фильтрации:
1. Фильтрация по полям модели:
- В классе модели определите нужные поля, которые будут использоваться для фильтрации. Например, если у вас есть модель "Product" с полем "name", вы можете добавить следующую строку в соответствующий класс администрирования:
list_filter = ('name',)
Это создаст фильтр по полю "name" в административной панели.
2. Фильтрация ManyToMany-полей:
- Если у вас есть ManyToMany-поле в модели, вы можете использовать его для фильтрации объектов. Например, если у вас есть модель "Category" с полем "products" типа ManyToMany на модель "Product", вы можете добавить следующую строку в класс администрирования:
list_filter = ('category',)
Это создаст фильтр по полю "category" в административной панели.
3. Пользовательские фильтры:
- Вы можете создать собственные фильтры, чтобы выполнять более сложную фильтрацию. Для этого вам нужно создать класс, унаследованный от admin.SimpleListFilter
, и затем добавить его в список list_filter
. Например, если вы хотите создать фильтр по диапазону даты создания объектов модели "Product", вы можете сделать следующее:
class CreationDateFilter(admin.SimpleListFilter): title = 'Дата создания' parameter_name = 'creation_date' def lookups(self, request, model_admin): return ( ('week', 'В эту неделю'), ('month', 'В этом месяце'), ('year', 'В этом году'), ) def queryset(self, request, queryset): if self.value() == 'week': return queryset.filter(created__gte=datetime.now() - timedelta(days=7)) elif self.value() == 'month': return queryset.filter(created__gte=datetime.now() - timedelta(days=30)) elif self.value() == 'year': return queryset.filter(created__gte=datetime.now() - timedelta(days=365)) class ProductAdmin(admin.ModelAdmin): list_filter = (CreationDateFilter,) admin.site.register(Product, ProductAdmin)
Теперь в административной панели будет доступен пользовательский фильтр "Дата создания", который позволит вам фильтровать объекты "Product" по дате создания.
Все эти способы могут быть использованы комбинированно для достижения более сложной фильтрации в Django-admin.