Могу ли я изменить поле auth_user.username в Django на 100 символов, ничего не нарушая? - PullRequest
8 голосов
/ 28 января 2011

Прежде чем кто-либо пометит этот вопрос как дубликат этого вопроса Может ли имя dhango auth_user.username быть varchar (75)?Как это можно сделать? или другие подобные вопросы по SO, пожалуйста, прочитайте этот вопрос.Вопрос, на который я ссылался, задает этот вопрос точно, но, к сожалению, ответы не относятся к заданному вопросу.

Можно ли изменить поле auth_user.username на 100 символов, выполнив следующие действия:

  1. Запустите таблицу ALTER в БД для поля имени пользователя
  2. Измените max_length здесь: username = models.CharField(_('username'), max_length=30, unique=True, help_text=_("Required. 30 characters or fewer. Letters, numbers and @/./+/-/_ characters"))

Если бы я это сделал, это что-то сломало бы в Django?

То, что это сломается, когда я обновлю Django до более высокой версии, не является проблемой.Я также не смотрю на написание других методов аутентификации. Я просто хочу знать, смогу ли я что-нибудь сломать, если бы сделал это.

Ответы [ 7 ]

20 голосов
/ 28 января 2011

Вам необходимо установить максимальную длину в нескольких местах: описание поля модели, описание поля формы и валидаторы максимальной длины.Валидаторы максимальной длины присоединяются к полям формы, а также к полям модели.

Вот фрагмент кода, который исправит все:

https://gist.github.com/1143957 (протестировано с django1.2 и 1.3)

Обновление: хорошие новости!Начиная с django 1.5, вы можете переопределить модель пользователя: Настройка модели пользователя

1 голос
/ 21 октября 2014

Для меня код ниже работает и просто хорошо.

from django.contrib.auth.models import AbstractUser

class MyUser(AbstractUser):
    ....
    # your custom fields

MyUser._meta.get_field('username').max_length = 255  # or 100

после запуска миграции

1 голос
/ 28 января 2011

Создайте модель профиля пользователя, добавьте туда поле с очень длинным именем пользователя и используйте его.конечно, это делает поле подлинного имени пользователя бесполезным, но это гораздо лучше, чем взламывать код Django, что доставит вам неприятности, когда вам потребуется его обновить.

1 голос
/ 28 января 2011

В этом нет никакого вреда. Просто измените длину в модели и в базе данных:)

0 голосов
/ 16 сентября 2014

Другое решение - изменить код аутентификации.Когда новый пользователь регистрируется, он вводит электронное письмо, вы сохраняете его в поле электронной почты, чтобы оно у вас было, а если его электронное письмо содержит> 30 символов, вы сокращаете его, прежде чем поместить в поле пользователя.Затем измените вашу аутентификацию при входе в систему для новых учетных записей.

0 голосов
/ 11 октября 2013

для будущих нужд это лучший и самый простой способ, который я узнал:

https://github.com/GoodCloud/django-longer-username

0 голосов
/ 28 января 2011

Если вы измените базу данных вручную, а также модель соответственно, то проблем быть не должно.

Вы также можете изменить обратно в противном случае, и я бы сказал, сделать резервную копию на всякий случай, но я не уверен, что это даже необходимо

...