Я хотел бы расширить функциональность django миграций - для устаревшего проекта.
Я пытаюсь создать миграцию, например, для пользовательских типов Enum, которые уже определены внутри БД.
Я использовал настроенную команду самоанализа django, чтобы извлечь все детали, необходимые для построения структуры Enum внутри моего django проекта. Важно то, что тип Enum внутри моего django проекта - это настроенный django.db.models.fields.Field
. Структура типа Enum и детали его реализации не так важны для этой проблемы.
Проблема заключается в том, что когда дело доходит до выполнения makemigrations
и migrate
. В реестре Django django.apps.apps
хранятся только модели, зарегистрированные в метаклассе ModelBase
. Что, в свою очередь, не позволяет мне проверять мои типы Enum.
Как я мог бы расширить функциональность миграции django, не обезьяна исправляя все вещи, такие как django.apps.Apps
, django.db.migrations.state.ProjectState
et c. ?
Единственный другой способ, который я могу придумать, - это создать полностью настраиваемое приложение, которое будет отражать все файлы из системы миграции Django, с настраиваемыми классами для реестра и состояния et c. Но это, вероятно, сломалось бы, если есть обновление Django, не говоря уже о его не идеальном решении для копирования и вставки всех модулей.
Обновление 1
Я думал, что я создать метакласс для моего пользовательского типа Enum, чтобы зарегистрировать его в реестре. Я скопировал и изменил метакласс ModelBase
. Это работает - это позволяет мне регистрировать мои типы Enum в Apps
реестре. Но это не красиво - он регистрирует их как «модель» на Apps.all_models
.
Я буду исследовать дальше ...
Я использую Django 3.0 и PostgreSQL 9.5 .