Django 3.2.7 - Определение текущей выполняемой команды из кода
TL;DR:
Можно ли из проекта django определить, какая команда запущена в данный момент?
ДЕТАЛИ:
У нас есть проект Django (работающий под управлением 3.2.7), в котором миграции немного перепутаны.
Существует модель конфигурации, которая была разработана уже после того, как были сделаны начальные миграции. Эта модель конфигурации в основном представляет собой модель Django ORM, отображенную на объект DB, и имеет некоторые функции кэширования (которые я не буду подробно описывать).
Фактический код, работающий на серверах, никогда не испытывает никаких проблем, поскольку конфигурационная модель уже создана на DB. Но сейчас я пытаюсь докеризировать весь проект, и мне нужно применить миграции с нуля. Когда я пытаюсь применить миграции к свежей БД,
- Он читает settings.py, который содержит переменную ROOT_URLCONF, которая направляется в другой .py файл .
- этот .py файл содержит список urlpatterns, который содержит ссылки на различные модели django .
- Некоторые из этих моделей включают ссылки на модель config, о которой я говорил ранее. Когда они импортируются, эти модели пытаются извлечь конфиги из этой модели конфигов, которая еще не инициализирована в БД, что вызывает
psycopg2.errors.UndefinedTable: relation "core_config" does not exist
ошибку.
Модель настолько глубоко интегрирована в систему, что я не могу изменить зависимые модели, чтобы использовать что-либо, не зависящее от этой модели.
Моя основная идея состоит в том, чтобы определить, запущена ли команда makemigrations
и вернуть пустой объект urlpatterns, если это так.
Не уверен, что это лучший подход, но это лучшее, что я смог придумать. Если у вас есть другое решение, я весь внимание.