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

时间:2015-07-09 16:45:51

标签: django django-migrations

我将项目从django 1.6升级到1.8。迁移时,我收到了contenttype:

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

详细信息:失败的行包含(31,null,django_auth,adgroup)。

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

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

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

3 个答案:

答案 0 :(得分:3)

您的--fake应用中的0002_remove_content_type_name迁移似乎有contenttypes错误:

contenttypes
 [X] 0001_initial
 [X] 0002_remove_content_type_name

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

./manage.py migrate contenttypes 0001 --fake

然后正确运行0002迁移,以便从contenttypes表中删除名称列:

./manage.py migrate contenttypes

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

答案 1 :(得分:1)

发生的事情是您的数据库已经进行了迁移但django没有意识到这一点,因为有多种原因(重新命名或删除较旧的迁移等)

您可以做的是压平旧的迁移,然后假冒迁移。因此,请在初始迁移之前删除所有迁移。

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

答案 2 :(得分:0)

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

对我来说,

django-admin.py migrate --fake-initial

做了这个伎俩。