将Django从1.8升级到1.9

时间:2017-04-04 08:32:12

标签: python django django-upgrade

我正在尝试将Django从1.8升级到1.9但是,当我运行迁移时,它会抛出错误。下面是堆栈跟踪。

Stack trace

这是因为Django 1.9中引入了一个新的迁移,即将auth用户名unicity逻辑从表单移动到模型[ref:ticket]。但是,在升级之前,我们已经实现了一些hack,这里将用户名字符长度从默认的30个字符长度增加到75个字符。现在,当我运行迁移时,它只考虑用户名的前30个字符并抛出完整性错误。有没有解决的办法 ?我不想使用自定义身份验证模型,因为涉及很多复杂问题。

1 个答案:

答案 0 :(得分:0)

首先,如果您尚未迁移到迁移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将increase the max length of the username到150个字符。这意味着您可以删除任何黑客以更改可能导致问题的用户名最大长度。

为了安全起见,我不建议伪造0007并升级到Django 1.9。我不知道伪造迁移和保持用户名长度黑客是否会起作用或导致我没有想到的问题。