Можно ли заполнить поля 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. У меня появилась эта идея, и я подумал должен же быть способ, верно?

Вернуться на верх