Django миграций для пользовательских типов - PullRequest
0 голосов
/ 11 марта 2020

Я хотел бы расширить функциональность 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 .

...