Админка: горизонтальные фильтры в справочниках

Фильтры справочников (Directory, Системи доступу) вынесены из боковой
панели наверх в тулбар (unfold list_filter_sheet=False), кастомные фильтры
переведены на unfold DropdownFilter — выпадающие списки вместо списка ссылок.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-25 01:25:11 +03:00
parent 242f0c95e0
commit a8faa206f6
+7 -4
View File
@@ -7,6 +7,7 @@ from django.utils.translation import gettext_lazy as _
from django.urls import reverse
from unfold.admin import ModelAdmin
from unfold.decorators import action
from unfold.contrib.filters.admin import DropdownFilter
from treenode.forms import TreeNodeForm
from django.forms import TextInput, Textarea
from django.db.models import Count
@@ -15,7 +16,7 @@ from import_export.admin import ImportExportModelAdmin
from unfold.contrib.import_export.forms import ExportForm, ImportForm
# Register your models here.
class DirectoryTypeFilter(SimpleListFilter):
class DirectoryTypeFilter(DropdownFilter):
title = _('Тип справочника')
parameter_name = 'directory_type'
@@ -26,8 +27,8 @@ class DirectoryTypeFilter(SimpleListFilter):
if self.value():
return queryset.filter(directory_type_id=self.value())
return queryset
class ActiveFilter(SimpleListFilter):
class ActiveFilter(DropdownFilter):
title = _('Статус')
parameter_name = 'is_active'
@@ -134,6 +135,7 @@ class DirectoryAdmin(ModelAdmin, ImportExportModelAdmin):
list_display = ['name_with_hierarchy', 'directory_type', 'code', 'is_active', 'updated_at']
list_display_links = ['name_with_hierarchy']
list_filter = [DirectoryTypeFilter, ActiveFilter]
list_filter_sheet = False # фильтры сверху горизонтально, а не в боковой панели
ordering = ('_path',)
actions_list = ['rebuild_tree_action']
@@ -225,7 +227,8 @@ class AccessSystemAdmin(ModelAdmin):
"""Отдельный раздел для списка систем/баз доступа (1С, почта, CRM…),
которые выбираются чекбоксами в заявке на найм."""
list_display = ['name', 'code', 'is_active', 'updated_at']
list_filter = ['is_active']
list_filter = [ActiveFilter]
list_filter_sheet = False
search_fields = ['name', 'code']
ordering = ['name']
fields = ['name', 'code', 'description', 'is_active']