Может ли имя dhango auth_user.username быть varchar (75)? Как это могло быть сделано? - PullRequest
64 голосов
/ 09 апреля 2010

Что-то не так с запуском alter table на auth_user, чтобы username было varchar(75), чтобы оно могло вместить электронную почту? Что это сломает, если что-нибудь?

Если бы вы изменили auth_user.username на varchar(75), где бы вам нужно было изменить django? Это просто вопрос изменения 30 на 75 в исходном коде?

username = models.CharField(_('username'), max_length=30, unique=True, help_text=_("Required. 30 characters or fewer. Letters, numbers and @/./+/-/_ characters"))

Или есть другие проверки в этом поле, которые необходимо изменить, или какие-либо другие последствия для этого?

См. Обсуждение комментариев с bartek ниже относительно причины для этого.

Редактировать : оглядываясь на это спустя много месяцев. Для тех, кто не знает предпосылки: в некоторых приложениях нет требования или желания использовать имя пользователя, они используют только электронную почту для регистрации и авторизации. К сожалению, в django auth.contrib требуется имя пользователя. Вы можете начать помещать электронные письма в поле имени пользователя, но поле имеет только 30 символов, и в реальном времени электронные письма могут быть длинными. Потенциально даже дольше, чем 75 символов, предложенных здесь, но 75 символов соответствуют большинству вменяемых адресов электронной почты. Вопрос нацелен на эту ситуацию, с которой сталкиваются приложения на основе аутентификации электронной почты.

Ответы [ 13 ]

0 голосов
/ 23 мая 2013

Просто добавьте приведенный ниже код внизу settings.py

from django.contrib.auth.models import User
User._meta.get_field("username").max_length = 75
0 голосов
/ 07 января 2013

Если вы используете venv (виртуальную среду), возможно, самое простое решение - это просто обновить код ядра напрямую, то есть открыть следующие два файла: - - venv / lib / python2.7 / sites-packages / django / contrib / auth / model.py - venv / lib / python2.7 / sites-packages / django / contrib / auth / forms.py Найдите все поля имени пользователя и измените max_length с 30 на 100. Это безопасно, поскольку вы уже используете venv, поэтому это не повлияет на любой другой проект Django.

0 голосов
/ 11 апреля 2010

Лучшее решение - это использовать поле электронной почты для электронной почты и имя пользователя для имени пользователя.

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

Для этого требуется только обезьянное исправление contrib.auth.forms.login_form, которое представляет собой несколько строк в соответствующем представлении.

И это гораздо лучше, чем пытаться изменить модели и таблицы базы данных.

...