Python 如何将django迁移设置为始终是最后应用的迁移

Python 如何将django迁移设置为始终是最后应用的迁移,python,django,django-migrations,Python,Django,Django Migrations,我有django应用程序和迁移文件002\u auto.py,用于更改数据库。我不知道将来会创建多少迁移文件,但我希望将文件002_auto.py应用为迁移过程的最后一部分 如何在执行django迁移时将要执行的迁移设置为最后一个迁移,而无需每次执行migrate命令时执行任何手动步骤(或每次添加新迁移时更改依赖项变量)? p.s.我已经查阅了django migrations文档和其他文章,但没有成功。也许您可以在您的一个模型中使用post\u migrate信号,并将调用的代码放入002\u

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

如何在执行django迁移时将要执行的迁移设置为最后一个迁移,而无需每次执行
migrate
命令时执行任何手动步骤(或每次添加新迁移时更改
依赖项
变量)?


p.s.我已经查阅了django migrations文档和其他文章,但没有成功。

也许您可以在您的一个模型中使用
post\u migrate
信号,并将调用的代码放入
002\u auto.py
以向hanlder发送信号


您可以将
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
此命令应添加到已安装的应用程序中的应用程序。然后你可以这样称呼它

python manage.py custom_migrate

阅读有关自定义命令的更多信息

如果迁移需要按特定顺序应用,那么它永远不会起作用(不管您尝试了什么黑客解决方案)

有可能在将来的某个时候,你会引入一个改变,这意味着最后一个改变没有任何意义


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

不幸的是,这对我来说不起作用,因为RunPython会更改数据库,这在使用post_migrateOK时是禁止的,也许您可以将所需的逻辑放入原始SQL查询中?有没有办法避免单独调用custom_migrate(在执行
migrate
的过程中调用它?@AndriyIvaneyko如果您愿意,您可以尝试将其命名为
migrate
并进行管理。py将使用您的
migrate
版本,而不是默认版本。它应该可以工作,但我没有检查。您希望这样做的原因是什么?这有点违背在fis中使用迁移的想法。)这不是一个好地方。