import logging from django.apps import AppConfig from django.db.models.signals import post_migrate logger = logging.getLogger(__name__) def rebuild_directory_tree(sender, **kwargs): """ Перестройка дерева справочников после миграций. Data-миграции работают с historical-моделями и создают записи Directory в обход treenode-логики — _path/_depth остаются пустыми и дерево в админке ломается. Пересчитываем после каждого migrate. """ try: from core.models import Directory Directory.update_tree() logger.info('Дерево справочников перестроено после migrate') except Exception as e: # Никогда не роняем migrate из-за перестройки дерева logger.error(f'Не удалось перестроить дерево справочников: {e}') class CoreConfig(AppConfig): name = 'core' def ready(self): post_migrate.connect(rebuild_directory_tree, sender=self)