Django call_command("makemigrations") странное поведение

python manage.py makemigrations из командной строки и call_command("makemigrations") из приложения django приводит к разному поведению.

В то время как командная строка является ожидаемым поведением, call_command("makemigrations") удаляет мою модель из миграции и после вызова migrate также из базы данных.

Когда я использую командную строку и набираю python manage.py makemigrations, я получаю:

Migrations for 'rest_service':
  rest_service\migrations\0009_tour.py
    - Create model Tour

тогда python manage.py migrate, я получаю:

Operations to perform:
  Apply all migrations: admin, auth, authtoken, contenttypes, rest_service, sessions, tenants
Running migrations:
  Applying rest_service.0009_tour... OK

Так что все в порядке.

После запуска моего testsuite я вижу мою тестовую базу данных, созданную django. Это выглядит так, как ожидалось, с таблицей для моей модели tour.

Но после запуска этого внутри моих тестов

call_command("makemigrations")
call_command("migrate", database="default")

модель (tour) была удалена из базы данных.

Если я снова запущу makemigrations, то получу следующее

Migrations for 'rest_service':
  rest_service\migrations\0011_tour.py
    - Create model Tour

и после migrate этого

Operations to perform:
  Apply all migrations: admin, auth, authtoken, contenttypes, rest_service, sessions, tenants
Running migrations:
  Applying rest_service.0010_delete_tour... OK
  Applying rest_service.0011_tour... OK

Если я использую только call_command("migrate", database="default") без makemigrations, это работает, но это не является удовлетворительным решением.

Почему makemigrations внутри приложения django ведет себя иначе, чем в командной строке? Особенно почему удаляется модель?

Django Version: 3.2.7


p.s.: если вы спросите себя, зачем мне это нужно. Я создаю базу данных во время выполнения (я знаю, что это плохо, но другого пути нет). Поэтому после создания базы данных мне нужно создать все таблицы.

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