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.: если вы спросите себя, зачем мне это нужно. Я создаю базу данных во время выполнения (я знаю, что это плохо, но другого пути нет). Поэтому после создания базы данных мне нужно создать все таблицы.