Я настраиваю регистрацию пользователя с помощью встроенной модели 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"}}