Можно ли заполнить поля Django's UserCreationForm в функции python?
У меня уже есть регистрационная форма на моем сайте электронной коммерции. Теперь я хотел бы использовать встроенную в Django систему валидации. Поэтому, насколько я понял, я должен использовать форму, предоставляемую Django, например, UserCreationForm. Но поскольку у меня уже есть форма, я подумал, что могу передать информацию о пользователе из моей собственной формы в какую-нибудь форму Django в бэкенде. Я попробовал следующее:
forms.py:
from django import forms
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User
class RegistrationForm(UserCreationForm):
email = forms.EmailField(max_length=60)
class Meta:
model = User
fields = ("username", "email", "password1", "password2", "first_name", "last_name")
utils.py, содержащий функцию, которая будет вызвана в views.py:
# does not return anything, since form.save() handles registration
def signup(request):
form = RegistrationForm()
# transfer the data from my_custom_view to Django's UserCreationForm
form.fields["username"].value = request.POST["username"]
form.fields["first_name"].value = request.POST["firstname"]
form.fields["last_name"].value = request.POST["lastname"]
form.fields["email"].value = request.POST["email"]
form.fields["password1"].value = request.POST["password"]
form.fields["password2"].value = request.POST["password_val"]
if form.is_valid():
# some message
form.save()
функция выше вызывается внутри views.py следующим образом:
home_view(request):
# some code
if request.method == "POST" and "signupbtn" in request.POST:
signup(request)
register.html:
<form class="px-4 py-3" method="POST">
{% csrf_token %}
<div class="container">
<input required class="form-control" type="text" name="firstname"
placeholder="First Name">
<input required class="form-control" type="text" name="lastname"
placeholder="Last Name">
</div>
</br>
<div class="container">
<input required class="form-control" type="text" name="username"
placeholder="Username">
<input required class="form-control" type="email" name="email"
placeholder="example@email.com">
<input required class="form-control" type="password" name="password"
placeholder="Password">
<input required class="form-control" type="password" name="password_val"
placeholder="Repeat Your Password">
</div>
<hr class="my-4">
<div class="d-grid">
<button class="btn btn-primary btn-login text-uppercase fw-bold" type="submit" name="signupbtn">Sign Up</button>
</div>
</form>
Как бы я ни пытался, form.is_valid() всегда возвращает False. Нет никакой конкретной причины, по которой я обрабатываю регистрацию таким образом. Альтернативой может быть Django-bootstrap или пошаговый рендеринг UserCreationForm. У меня появилась эта идея, и я подумал должен же быть способ, верно?