'How do I fix the error of my django form not having cleaned_data attribute?

I have this form:

class RegisterForm(UserCreationForm):
    email = forms.EmailField()

    class Meta:
        model = User
        fields = ["username", "email", "password1",
                  "pass"]

And this View:

def register(req):
    if req.method == 'POST':
        form = RegisterForm(req.POST)
        print('yaml')
        if form.is_valid():
            form.save()
        return redirect("/home")
    else:
        form = RegisterForm()
        form.save()
        return render(req, "users/register.html", {"form":form})

But when I visit the url

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include("main.urls")),
    path('register/', userViews.register, name="register"),
    path('', include("django.contrib.auth.urls")),
]

I keep getting this error:

Internal Server Error: /register/
....
AttributeError: 'RegisterForm' object has no attribute 'cleaned_data'

Please I need some help.



Solution 1:[1]

Remove the form.save() in case of a GET request: you can only save an object in case it is bounded and valid, so:

def register(request):
    if request.method == 'POST':
        form = RegisterForm(request.POST, request.FILES)
        if form.is_valid():
            form.save()
            # only redirect when the POST is successful
            return redirect('home')  # ? use the name of a view
    else:
        form = RegisterForm()  # no form.save()
    return render(request, 'users/register.html', {'form': form})

Solution 2:[2]

First thing, pass is no field in inbuilt User model, there are two fields related to passwords which are password1 and password2, unless and until you haven't changed it in original django code.

There no need for redirection, please remove form.save() in else condition.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Willem Van Onsem
Solution 2 Sunderam Dubey