使用 django 1.7.5,我通过添加一个字段对 User_Profile 进行了更改:
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="" 或 blank=True 尝试不同的事情之后,没有任何效果。算了,我删除了该字段并将模型恢复到一切正常时的状态。模型看起来像以前一样,我运行 makemigrations,它删除了该字段(它说)。太棒了!
但是,
$ python manage.py migrate
仍然导致相同的错误,提示我添加然后删除的字段。就好像我不能让 django 忘记那个字段的存在。但它不存在于我的 models.py 文件中。我该如何解决?那个领域在哪里?是不是在我的 SqlLite 中,我应该进入并从那里手动删除它?
注意:我已经手动删除了损坏的迁移文件,并且还恢复到更改前的先前 GIT 版本。什么都没用,python manage.py migrate 似乎还是坏了..
请您参考如下方法:
虽然我没有使用南方(我认为),但以下解决了我的问题:
Backwards migration with Django South
具体来说,我遵循了以下步骤:
- 从 models.py 中删除 culprit 字段
- 删除罪魁祸首迁移文件及其 .pyc 副本
- 将迁移回滚到错误之前的数字,例如
$ python manage.py 迁移 MY_APP_NAME 0024
Running migrations:
No migrations to apply.
虽然最后一步似乎什么也没做,但现在当我运行 makemigrations 和 migrate 时,一切都很好,零错误。
