在非交互式环境中应用Django迁移

时间:2016-02-07 02:13:33

标签: python django heroku database-migration

我已经在Django中重命名了一些模型,并使用python manage.py makemigrations创建了迁移。

使用python manage.py migrate时,会收到以下消息提示

  

外键与这些内容类型相关的任何对象也会   被删除。您确定要删除这些内容类型吗?   如果您不确定,请回答“否”#。

     

键入'是'继续,或者不#39;取消:

在我的本地计算机上,我只需输入“是”'。然而, 我的应用程序部署在Heroku上,我已将迁移配置为在构建应用程序时自动运行。我使用看起来像这样的post_compile文件实现了这个目标:

# Run Django migrations
./manage.py migrate

# Compress static assets
./manage.py compress

由于没有处于交互式shell中,迁移是否完全无法完成(因此无法回答“是”这个问题)?如果是这样,如何避免这个问题?

1 个答案:

答案 0 :(得分:5)

您可以使用--noinput命令的migrate命令行参数:

./manage.py migrate --noinput

这会抑制提示,但会删除过时的内容类型(即,它的效果就像您在提示时回答No一样)。请参阅Django ticket #25036

另一个替代方法是使用Unix命令yes(我不确定它是否默认在Heroku上启用):

yes "yes" | ./manage.py migrate