0

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它,但这不是一个令人满意的解决方案。

为什么makemigrationsdjango 应用程序内部的行为与命令行不同?特别是为什么要删除模型?

Django 版本:3.2.7


ps:如果你问自己为什么我需要这个。我在运行时创建一个数据库(我知道这很糟糕,但没有其他办法)。因此,在创建数据库后,我需要创建所有表。

4

0 回答 0