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

Kie*_*ran 3 python django heroku database-migration

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

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

通过外键与这些内容类型相关的任何对象也将被删除.您确定要删除这些内容类型吗?如果您不确定,请回答"否".

输入"是"继续,或者"否"取消:

在我的本地机器上,我只需输入"是"即可.但是,我的应用程序部署在Heroku上,我已将迁移配置为在构建应用程序时自动运行.我使用如下所示的post_compile文件实现此目的:

# Run Django migrations
./manage.py migrate

# Compress static assets
./manage.py compress
Run Code Online (Sandbox Code Playgroud)

迁移是否会因为不在交互式shell中而无法完成(因此无法对此问题回答"是")?如果是这样,如何避免这个问题呢?

Sel*_*cuk 6

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

./manage.py migrate --noinput
Run Code Online (Sandbox Code Playgroud)

这会抑制提示,但不会删除陈旧的内容类型(即,它就像你No在提示时回答一样).查看Django门票#25036.

另一种选择是使用Unix命令yes(我不确定它是否默认在Heroku上启用):

yes "yes" | ./manage.py migrate
Run Code Online (Sandbox Code Playgroud)