如何将 Django 迁移设置为始终是最后一个应用

How to setup django migrations to be always the last one applied

我有 django 应用程序和迁移文件 002_auto.py,它使用 Django RunPython 来更改数据库。我不知道将来会创建多少迁移文件,但我希望将文件 002_auto.py 作为迁移过程的最后一部分应用。

如何在执行 django 迁移时将迁移设置为最后一个执行,而无需在每次我想执行 migrate 命令(或更改 dependencies 每次我添加新迁移时都会变)?

p.s. 我查看了 django 迁移文档和其他文章但没有成功。

也许你可以在你的一个模型中使用post_migrate信号,然后把你调用的代码放在002_auto.py信号处理器中。

https://docs.djangoproject.com/en/1.10/ref/signals/#post-migrate

您可以子类化 migrate 命令并将此代码放在 super 调用

之后
# project/myapp/management/commands/custom_migrate.py
from django.core.management.commands.migrate import Command as MigrateCommand

class Command(MigrateCommand):
    def handle(self, *args, **options):
        super().handle(*args, **options)
        # put your code from 002_auto.py here

此命令应添加到您 INSTALLED_APPS 中的应用程序。然后你可以这样称呼它

python manage.py custom_migrate

阅读更多关于自定义命令的信息https://docs.djangoproject.com/en/1.10/howto/custom-management-commands/

如果迁移需要按特定顺序应用,那么这将永远行不通(无论您尝试使用何种 hacky 解决方案)。

很可能在未来的某个时候,您将引入一个更改,这意味着最后一个没有任何意义。

您最好的选择是创建自定义管理命令 and/or bash 脚本,然后使用它来迁移和更改您的数据库。