使用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
似乎仍然被打破..
答案 0 :(得分:2)
虽然我没有使用南方(我认为),但以下问题解决了我的问题:
Backwards migration with Django South
具体来说,我按照以下步骤操作:
$ 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
运行正常。