django 1.8 迁移内容类型完整性错误

django 1.8 migrations contenttype integrity error

我将我的项目从 django 1.6 升级到 1.8。迁移时,我收到内容类型错误:

django.db.utils.IntegrityError: null value in column "name" violates not-null constraint

详细信息:失败行包含(31,空,django_auth,广告组)。

我尝试迁移 contenttype 0002,但它随后告诉我:

django.db.utils.ProgrammingError: relation "django_content_type" already exists

如何覆盖第一个迁移文件?

发生的事情是你的数据库已经有了迁移,但 django 不知道它,因为多种原因(旧的迁移被重命名或删除等)

您可以做的是展平旧的迁移,然后伪造一个迁移。因此,删除所有迁移,直到您进行初始迁移。

然后,运行 python manage.py makemigrationspython manage.py migrate(可能会抛出错误)和 python manage.py migrate --fake-initial。这是 link 到 django docs。这绝对不是最佳做法,但应该让你起床 运行ning。初始迁移有时会导致奇怪的问题。如果这不能解决问题,请尝试使用 --fake 而不是 fake-initial。此外,我建议在开始此旅程之前转储数据库。祝你好运。

Django 1.6 数据库可能包含也可能不包含南方迁移,迁移到 1.8 会使用内部迁移。

对我来说,

django-admin.py migrate --fake-initial

成功了。

您可能 --faked contenttypes 应用中的 0002_remove_content_type_name 迁移有误:

contenttypes
 [X] 0001_initial
 [X] 0002_remove_content_type_name

您可以使用以下方法撤消:

./manage.py migrate contenttypes 0001 --fake

然后正确地 运行 0002 迁移,以便名称列从 contenttypes table:

中删除
./manage.py migrate contenttypes

然后再次尝试 运行迁移您的应用程序。