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
所以一切都好。
在我的测试套件启动后,我可以看到我的测试数据库是由 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 版本:3.2.7
ps:如果你问自己为什么我需要这个。我在运行时创建一个数据库(我知道这很糟糕,但没有其他办法)。因此,在创建数据库后,我需要创建所有表。