Django 1.7 中的迁移

Posted

技术标签:

【中文标题】Django 1.7 中的迁移【英文标题】:Migrations in Django 1.7 【发布时间】:2014-05-28 21:30:10 【问题描述】:

我目前参与了一个使用 Django 1.7 开发版本的项目。我想使用“makemigrations”将我在模型中所做的更改(添加字段、删除模型等)传播到数据库架构中和“迁移”命令。我在我的应用程序中的一个模型中添加了一个“年龄”字段。

country = models.CharField(max_length=50, blank=True)
address = models.CharField(max_length=100, blank=True)
postal_code = models.IntegerField(max_length=50, blank=True)
city = models.CharField(max_length=50, blank=True)
phone_no = models.CharField(max_length=25, blank=True)
skype_name = models.CharField('Skype Username',max_length=50, blank=True)
age=models.IntegerField(max_length=25,blank=True)

当我使用“makemigrations”命令时,输出类似于---“未检测到更改”。我猜“makemigrations”无法弄清楚对架构所做的更改。任何建议我该怎么做工作??

【问题讨论】:

您使用的具体命令是什么?是否包含应用名称? "python manage.py makemigrations"。不,我没有包含应用名称。 【参考方案1】:

如果这是您第一次迁移您必须使用的应用程序:

manage.py makemigrations myappname

一旦你这样做了,你就可以做到:

manage.py migrate

如果您的应用程序在数据库中,修改了它的模型并且它没有更新 makemigrations 上的更改,那么您可能还没有迁移它。 将您的模型改回其原始形式,运行第一个命令(使用应用程序名称)并迁移......它会伪造它。执行此操作后,将更改恢复到模型上,运行 makemigrations 并再次迁移,它应该可以工作。

【讨论】:

【参考方案2】:

我有时也会遇到同样的问题。 我设法通过以下方式填充数据库中的更改:

rm -rf your_app/migrations/*

python manage.py 迁移

如果它不起作用,请考虑手动删除表,如果其中没有数据。

它适用于 django 1.7c1

【讨论】:

仅适用于您自己工作或除开发之外还没有任何安装的情况,因为这会删除迁移的主要优点,即通过创建来支持数据库模式版本控制增量数据库更新脚本。【参考方案3】:

如果您是adding initial migrations to an app,则在使用makemigrations 命令时必须包含应用名称。

python manage.py makemigrations your_app_label

【讨论】:

以上是关于Django 1.7 中的迁移的主要内容,如果未能解决你的问题,请参考以下文章

Django 1.7 中的 Django-migrations 检测模型更改,但不会在迁移时应用它们

如何取消应用 django 1.7 中的第一次迁移 [重复]

text 使用django 1.7中的迁移重命名字段

在 Django 1.7 迁移中调用 loaddata 会抛出“‘字段列表’中的未知列‘[字段]’”

具有默认值的外键上的 Django 1.7 迁移错误

Django 1.7 内置迁移与南迁移?