Принудительное использование формы входа в Django для ввода имени пользователя более 30 символов - PullRequest
5 голосов
/ 21 июля 2011

Я пытаюсь использовать электронную почту для имен пользователей, и она работает почти идеально. Я следовал этим указаниям: http://www.micahcarrick.com/django-email-authentication.html

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

Есть идеи?

UPDATE:

<form method="post" action="." class="full">
{% csrf_token %}
<ul>
    {% if form.non_field_errors %}<li>{{ form.non_field_errors }}</li>{% endif %}
    <li>
        {{ form.username.errors }}
        <label for="id_username">Email/Username</label>
        <input type="text" id="id_username" name="username" maxlength="75">
    </li>
    <li>
        {{ form.password.errors }}
        <label for="id_password">{{ form.password.label }}</label>
        {{ form.password }}
    </li>
</ul>
<input type="submit" value="Login">
<a href="{% url django.contrib.auth.views.password_reset %}">Forgot your password?</a>
</form>

Ответы [ 2 ]

4 голосов
/ 19 августа 2011

В конце концов, я исправил это, добавив это к моему верхнему уровню init

# Added so the login field can take email addresses longer than 30 characters
from django.contrib.auth.forms import AuthenticationForm

AuthenticationForm.base_fields['username'].max_length = 150
AuthenticationForm.base_fields['username'].widget.attrs['maxlength'] = 150
AuthenticationForm.base_fields['username'].validators[0].limit_value = 150
0 голосов
/ 21 июля 2011

Просто чтобы проверить, изменили ли вы длину поля имени пользователя в django.contrib.auth.models.User с 30 на 75, затем удалите старую таблицу аутентификации из БД, возьмите свежий SQL для создания таблицы аутентификации, запустивmanage.py sqlall и выполнить этот SQL для создания новой таблицы с обновленной длиной поля?

(Так как это всего лишь дополнительный вопрос, я бы оставил его в комментарии, но не совсемдостаточно повторений ...)

...