Админка: отдельный раздел «Системи доступу» для баз/систем доступа

Системы доступа (1С, почта, CRM…) — записи справочника Directory
(access_system), которые выбираются в заявке на найм. Раньше их можно было
редактировать только внутри общего «Довідники» с фильтром — неочевидно.

- AccessSystem: proxy над Directory (фильтр по access_system), свой раздел
  админки со списком/добавлением; directory_type проставляется автоматически
- SILENCED_SYSTEM_CHECKS=['models.E016'] — гасит ложноположительный E016
  (proxy наследует treenode-индекс по _path; на реальной таблице всё корректно)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-25 01:12:07 +03:00
parent 5a274f7f90
commit 242f0c95e0
5 changed files with 72 additions and 3 deletions
+20 -1
View File
@@ -10,7 +10,7 @@ from unfold.decorators import action
from treenode.forms import TreeNodeForm
from django.forms import TextInput, Textarea
from django.db.models import Count
from core.models import DirectoryType, Directory, ConnectorConfig
from core.models import DirectoryType, Directory, ConnectorConfig, AccessSystem
from import_export.admin import ImportExportModelAdmin
from unfold.contrib.import_export.forms import ExportForm, ImportForm
@@ -220,6 +220,25 @@ class DirectoryAdmin(ModelAdmin, ImportExportModelAdmin):
children_count_display.short_description = 'Потомков'
@admin.register(AccessSystem)
class AccessSystemAdmin(ModelAdmin):
"""Отдельный раздел для списка систем/баз доступа (1С, почта, CRM…),
которые выбираются чекбоксами в заявке на найм."""
list_display = ['name', 'code', 'is_active', 'updated_at']
list_filter = ['is_active']
search_fields = ['name', 'code']
ordering = ['name']
fields = ['name', 'code', 'description', 'is_active']
def get_queryset(self, request):
return super().get_queryset(request).filter(directory_type__code='access_system')
def save_model(self, request, obj, form, change):
if not obj.directory_type_id:
obj.directory_type = DirectoryType.objects.get(code='access_system')
super().save_model(request, obj, form, change)
@admin.register(ConnectorConfig)
class ConnectorConfigAdmin(ModelAdmin):
list_display = ('connector_type_display', 'is_enabled', 'host', 'port', 'use_ssl', 'updated_at')