我试图将Django从1.8升级到1.9,但是当我运行迁移时,它会抛出错误。以下是堆栈跟踪。将Django从1.8升级到1.9的问题
这是因为在Django 1.9引入新的迁移这是AUTH用户名单一性逻辑从形式移动到模型的[参考:ticket]。但是,在升级之前,我们已经实现了一些hack这里提到的用于将用户名字符长度从默认的30个字符长度增加到75个字符。现在,当我运行迁移时,它只考虑用户名的前30个字符并抛出完整性错误。有没有解决的办法 ?我不想去定制auth模型,因为涉及很多并发症。
我试图将Django从1.8升级到1.9,但是当我运行迁移时,它会抛出错误。以下是堆栈跟踪。将Django从1.8升级到1.9的问题
这是因为在Django 1.9引入新的迁移这是AUTH用户名单一性逻辑从形式移动到模型的[参考:ticket]。但是,在升级之前,我们已经实现了一些hack这里提到的用于将用户名字符长度从默认的30个字符长度增加到75个字符。现在,当我运行迁移时,它只考虑用户名的前30个字符并抛出完整性错误。有没有解决的办法 ?我不想去定制auth模型,因为涉及很多并发症。
首先,如果您尚未迁移到迁移0006。
./manage.py migrate auth 0006_require_contenttypes_0002
然后再升级到Django的1.10(或1.11 LTS)一旦它的发布,以及假冒迁移0007
./manage.py migrate auth 0007_alter_validators_add_error_messages --fake
这种迁移正试图从75个字符减少列30个字符,所以它必须是伪造的。从Django的1.10将increase the max length of the username 150个字符
./manage.py migrate auth
特别是,迁移0008:
然后,您可以为auth
运行迁移的其余部分。这意味着您可以删除任何黑客来更改可能导致问题的用户名最大长度。
为了安全起见,我不建议伪造0007并升级到Django 1.9。我不知道是否伪造迁移并保持用户名长度的破解会起作用或导致我没有想到的问题。
数据库中是否有许多用户? –
@AndreyShipilov是的。 – Conans
一个苛刻的选择是获取这些重复的用户名,将它们全部改为独特的东西,比如说,在最后加上一个数字。然后迁移,然后将其更改回来。 –