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, если это так.

Не уверен, что это лучший подход, но это лучшее, что я смог придумать. Если у вас есть другое решение, я весь внимание.

Вернуться на верх