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 中的第一次迁移 [重复]