如何将 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 脚本,然后使用它来迁移和更改您的数据库。
我有 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 脚本,然后使用它来迁移和更改您的数据库。