我試圖將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
一個苛刻的選擇是獲取這些重複的用戶名,將它們全部改爲獨特的東西,比如說,在最後加上一個數字。然後遷移,然後將其更改回來。 –