I managed to get the stock standard User Creation Form to work. Which included just the username, password1 and password2 field. However, when I try to include the email field it never shows up in my template. I think I'm missing something in my view perhaps. Here is my code:
forms.py
from django import forms
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User
class UserCreationForm(UserCreationForm):
    email = forms.EmailField(required=True)
    class Meta:
        model = User
        fields = ("username", "email", "password1", "password2")
    def save(self, commit=True):
        user = super(UserCreationForm, self).save(commit=False)
        user.email = self.cleaned_data["email"]
        if commit:
            user.save()
        return user
views.py
from django.contrib.auth.forms import UserCreationForm 
def register_user(request):
if request.method == 'POST':
    form = UserCreationForm(request.POST)
    if form.is_valid():
        form.save()
        return HttpResponseRedirect('/')
args = {}
args.update(csrf(request))
args['form'] = UserCreationForm()
return render_to_response('stories/register.html', args)
register.html
<form action = "/register/" method = "POST"> 
    {% csrf_token %} 
    <p>
    {{ form.username.label_tag }}
    {{ form.username}}
    </p>
    <p> 
    {{ form.email.label_tag }}
    {{ form.email }}
    </p>
    <p>
    {{ form.password1.label_tag }}
    {{ form.password1 }}
    </p>
    <p>
    {{ form.password2.label_tag }}
    {{ form.password2 }}
    </p>
    <input type = "submit" value = "register" />
</form>
All of the fields in this file are being rendered into the view, Except the email field.
Can anyone spot why?!
I'm new with django and I tried what you posted and I had to changed to work ... Here's what I did.
forms.py
from django import forms
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User
class UserCreationForm(UserCreationForm):
    email = forms.EmailField(required=True, label='Email')
    class Meta:
        model = User
        fields = ("username", "email", "password1", "password2")
    def save(self, commit=True):
        user = super(UserCreationForm, self).save(commit=False)
        user.email = self.cleaned_data["email"]
        if commit:
            user.save()
        return user
views.py
from .forms import UserCreationForm
from django.urls import reverse_lazy
from django.views import generic
class SignUp(generic.CreateView):
    form_class = UserCreationForm
    success_url = reverse_lazy('login')
    template_name = 'accounts/signup.html'
signup.html
{% extends 'polls/base.html' %}
{% load bootstrap4 %}
{% load static %}
{% block content %}
<body class="body_login">
  <form method="post" class="form-signup">
    {% csrf_token %}
    {% bootstrap_form form  %}
    <button type="submit" class="save btn btn-dark">Sign up</button>
  </form>
</body>
{% endblock %}
You are importing the wrong UserCreationForm in views.py. You should import your own form not the Django's one:
stories/views.py
from stories.forms import UserCreationForm
...
Besides that, you don't have to wrap all your fields with <p></p> individually as there exists form.as_p() for this job.
register.html
<form action = "/register/" method = "POST">{% csrf_token %}
    {{ form.as_p }}
</form>
Hope this helps.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With