我正在尝试将 Django 从 1.8 升级到 1.9,但是,当我运行迁移时,它会抛出错误。下面是堆栈跟踪。
这是因为 Django 1.9 中引入了新的迁移,即将身份验证用户名唯一性逻辑从表单移动到模型 [ref: ticket ]。但是,在升级之前,我们已经实现了这里提到的一个小技巧,将用户名字符长度从默认的 30 个字符长度增加到 75 个字符。现在,当我运行迁移时,它只考虑用户名的前 30 个字符并抛出完整性错误。有没有解决的办法 ?我不想使用自定义身份验证模型,因为涉及很多并发症。
我正在尝试将 Django 从 1.8 升级到 1.9,但是,当我运行迁移时,它会抛出错误。下面是堆栈跟踪。
这是因为 Django 1.9 中引入了新的迁移,即将身份验证用户名唯一性逻辑从表单移动到模型 [ref: ticket ]。但是,在升级之前,我们已经实现了这里提到的一个小技巧,将用户名字符长度从默认的 30 个字符长度增加到 75 个字符。现在,当我运行迁移时,它只考虑用户名的前 30 个字符并抛出完整性错误。有没有解决的办法 ?我不想使用自定义身份验证模型,因为涉及很多并发症。
首先,如果您还没有迁移到迁移 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 个字符,所以它必须是伪造的。
然后,您可以运行其余的迁移auth
:
./manage.py migrate auth
特别是,从 Django 1.10 迁移 0008 会将用户名的最大长度增加到 150 个字符。这意味着您可以删除任何黑客来更改可能导致问题的用户名最大长度。
为了安全起见,我不建议伪造 0007 并升级到 Django 1.9。我不知道伪造迁移并保持您的用户名长度黑客是否会起作用或导致我没有想到的问题。