【发布时间】:2013-12-11 17:14:02
【问题描述】:
我正在使用 django-south 迁移 django 项目中的数据库表。我正在重命名a previous question 中讨论的模型:
# Renaming model from 'Foo' to 'Bar'
db.rename_table('myapp_foo', 'myapp_bar')
db.send_create_signal('myapp', ['Bar'])
但是,我使用 fabric 自动将我的应用程序部署到生产服务器,并且我希望迁移在没有任何用户输入的情况下运行。为此,我使用 noinput 选项运行迁移命令,如下所示
python manage.py migrate --noinput
除了send_create_signal 不会在此模式下删除陈旧的内容类型之外,这工作正常。
这是因为 django contenttype managament 命令update_contenttypes 仅在给出输入时删除过时的内容类型。
我可以直接在南迁移中复制 update_contenttypes 命令,但这似乎不是一个好的解决方案。有没有人有关于如何在不重复 django 命令的情况下触发删除内容类型的建议?
【问题讨论】:
-
为什么要使用 --noinput 运行迁移?
-
这是因为我想在没有人工交互的情况下部署到生产服务器。我正在使用结构脚本完全自动化地将代码库从存储库部署到服务器。为了能够做到这一点,我在这里寻找无需人工输入的解决方案。
-
那么您可能应该只是复制命令,或者创建数据迁移并手动删除受影响的 content_types。
-
你可能是对的。我希望有一个更优雅的解决方案。如果
update_contenttypes函数可以选择在没有输入的情况下强制更新,那将是理想的。但既然没有,似乎在迁移中明确地这样做是最好的解决方案。 -
也许你可以用fabric而不是noinput将“y”字符作为命令的输入?
标签: django model rename user-input django-south