Проблема с обновлением Django с 1.8 до 1.9
Я пытаюсь обновить Django с 1.8 до 1.9, но когда я запускаю миграцию, это выдает ошибку. Ниже приведена трассировка стека.
Это связано с новой миграцией, введенной в Django 1.9, которая заключается в переносе логики уникальности имени пользователя из формы в модель [ref: ticket ]. Но перед обновлением мы реализовали небольшой хак, упомянутый здесь, чтобы увеличить длину имени пользователя с 30 символов по умолчанию до 75 символов. Теперь, когда я запускаю миграцию, он учитывает только первые 30 символов имени пользователя и выдает ошибку целостности. Это можно обойти? Я не хочу использовать собственную модель аутентификации, так как в ней много сложностей.
1 ответ
Сначала перейдите на миграцию 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
В частности, миграция 0008 из Django 1.10 увеличит максимальную длину имени пользователя до 150 символов. Это означает, что вы можете удалить любые хаки, чтобы изменить максимальную длину имени пользователя, что может вызвать проблемы.
Чтобы быть в безопасности, я бы не советовал подделывать 0007 и переходить на Django 1.9. Я понятия не имею, сработает ли фальсификация миграции и сохранение взлома длины имени пользователя или проблемы, о которых я не задумывался.