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

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

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

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

что-нибудь сломается в Джанго, если я это сделаю?

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

7 ответов


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

вот фрагмент кода, который будет исправлять все:

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

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


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


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


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

from django.contrib.auth.models import AbstractUser

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

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

после того, как вы можете запустить свой миграции


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

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


для будущих потребностей это лучший и простой способ я нашел:

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


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