Django迁移破碎,不会忘记删除的列

时间:2015-09-27 17:48:41

标签: python django django-models

使用django 1.7.5,我通过添加一个字段对User_Profile进行了更改:

std::vector

然后,

school = models.CharField(max_length = 255, blank=True, default="")

没问题。它增加了这个领域。接着,

$ python manage.py makemigrations 

给了我:

$ python manage.py migrate
哦,哦。好吧,在通过制作字段django.db.utils.IntegrityError: mathbreakers_userprofile__new.school may not be NULL default=""尝试不同的事情后,没有任何作用。算了吧,我删掉了这个字段并将模型恢复到一切正常的状态。模型看起来像以前一样,我运行makemigrations,它删除了字段(它说)。太好了!

然而,

blank=True

仍会导致SAME错误,抱怨我添加然后删除的字段。好像我不能让django忘记那个领域存在。但它并不存在于我的models.py文件中。我该如何解决?那个领域在哪里?我应该进入我的SqlLite并从那里手动删除它吗?

注意:我已手动删除损坏的迁移文件,并在更改之前还恢复到之前的GIT版本。没有任何工作,$ python manage.py migrate 似乎仍然被打破..

2 个答案:

答案 0 :(得分:2)

虽然我没有使用南方(我认为),但以下问题解决了我的问题:

Backwards migration with Django South

具体来说,我按照以下步骤操作:

  • 从models.py
  • 中删除罪魁祸首字段
  • 删除罪魁祸首迁移文件及其.pyc对应文件
  • 将迁移回滚到错误发生前的数字,例如:

$ python manage.py迁移MY_APP_NAME 0024

  

正在运行迁移:

     

无需迁移。

虽然最后一步似乎什么也没做,但是现在当我运行makemigrations并进行迁移时,一切都很好,零错误。

答案 1 :(得分:0)

TL; DR:尝试在app / migrations中编辑最新的迁移.py文件。

我自己也有类似的问题(Django 1.8.6,Postgresql)。我想创建一个现有类的子类,并希望将一个字段从基类移动到子类。我(我想)从父类中删除了有问题的字段,但是当我运行python manage.py migrate时,我得到的是一条错误消息,说子类中的字段在基类中碰撞了一个类似名称的字段

我查看了最后一次迁移.py文件(在app / migrations中),并注意到从基类中删除字段的命令是之后创建子类的命令。所以我编辑了迁移文件(更改了命令的顺序),python manage.py migrate运行正常。