Встроенная UserCreationForm выдает «Два поля пароля не совпадают», когда пароли совпадают. Джанго == 2.2.2 - PullRequest
1 голос
/ 25 июня 2019

Я настраиваю регистрацию пользователя с помощью встроенной модели User и UserCreationForm. Проблема заключается в том, что проверка формы завершается неудачно, если указаны правильные учетные данные. И я не могу понять, почему?

Похоже, что form.cleaned_data по какой-то причине не хватает 'password2'. Но form.data имеет его.

Содержание POST равно form.data .

POST

csrfmiddlewaretoken: 1EA7k5HUM7aDO1qj9DPslM18rz2QATZh0qtRd1R8iHc9MmnBgLGyUsO3YJzQjNwA
username: test
password1: qwe
password2: qwe

У меня такой же код в другом проекте на django == 2.1, и нет проблем.

views.py

from django.contrib.auth.forms import UserCreationForm
from django.http import JsonResponse

def register_user(request):
    if request.method == 'POST':
        form = UserCreationForm(request.POST)
        if form.is_valid():
            form.save()
            username = form.cleaned_data['username']
            password = form.cleaned_data['password1']
            return JsonResponse({'username': username, 'password': password})
        else:
            return JsonResponse({
                'error': 'Form not valid',
                'messages': form.error_messages,
                'cleaned_data': form.cleaned_data,
                'data': form.data,
                })
   else:
       form = UserCreationForm()
       return render(request, 'register_form.html', {'form': form.as_p()})

Шаблон:

{% block content %}

<form method="post">
    {% csrf_token %}
    {{ form }}
    <input type="submit" name="" value="Submit">
</form>

{% endblock %}

Ожидаемое:

{'username': 'test', 'password': 'qwe'}

Фактический:

{"error": "Form not valid", 
 "messages": {"password_mismatch": "The two password fields didn't match."}, 
 "cleaned_data": {"username": "test", 
                  "password1": "qwe"}, 
 "data": {"csrfmiddlewaretoken": "long string:)", 
          "username": "test", 
          "password1": "qwe", 
          "password2": "qwe"}}

1 Ответ

0 голосов
/ 25 июня 2019

Информация об ошибках формы может быть найдена в form.errors . Похоже, что вводящее в заблуждение поле form.error_messages используется как константа только для хранения текста. Разве его название не должно быть заглавными, хотя?

class UserCreationForm(forms.ModelForm):
    """
    A form that creates a user, with no privileges, from the given username and
    password.
    """
    error_messages = {
        'password_mismatch': _("The two password fields didn't match."),
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...