title: Django Sign Up with extra fields
body: <p>I have expanded my SignUp form with UserCreationForm and make email activations. And all works perfect, but I don't understand how I address the new variable. 
  I can't display it in a template and I do not find it in the user admin panel.</p>
  
  <p><strong>forms.py</strong></p>
  
  <pre><code>from django import forms
  from django.contrib.auth.forms import UserCreationForm
  from customuser.models import User
  
  class SignUpForm(UserCreationForm):
      phone = forms.CharField(max_length= 20)   #&lt;--my new variable 
  
      class Meta:
          model = User
          fields = ('phone', 'email', 'password1', 'password2',)
  </code></pre>
  
  <p><strong>views.py</strong></p>
  
  <pre><code>def signup(request):
      if request.method == 'POST':
          form = SignUpForm(request.POST)
          if form.is_valid():
              user = form.save(commit=False)
              user.is_active = False
              user.save()
              current_site = get_current_site(request)
              mail_subject = 'Activate your blog account.'
              message = render_to_string('reg/acc_active_email.html', {
                  'user': user,
                  'domain': current_site.domain,
                  'uid':urlsafe_base64_encode(force_bytes(user.pk)),
                  'token':account_activation_token.make_token(user),
              })
              to_email = form.cleaned_data.get('email')
              email = EmailMessage(
                          mail_subject, message, to=[to_email]
              )
              email.send()
              return HttpResponse('Please confirm your email address to complete the registration')
      else:
          form = SignUpForm()
      return render(request, 'reg/signup.html', {'form': form})
  
  
  def activate(request, uidb64, token):
      try:
          uid = force_text(urlsafe_base64_decode(uidb64))
          user = User.objects.get(pk=uid)
      except(TypeError, ValueError, OverflowError, User.DoesNotExist):
          user = None
      if user is not None and account_activation_token.check_token(user, token):
          user.is_active = True
          user.save()
          login(request, user)
          # return redirect('index')
          return HttpResponse('Thank you for your email confirmation. Now you can login your account.')
      else:
          return HttpResponse('Activation link is invalid!')
  </code></pre>
  
  <p>If I try insert <strong><em>phone</em></strong> at the html template like <strong>{{ user.phone }}</strong> I can't see anything. If I try add <strong>phone</strong> at the admin.py file like this</p>
  
  <p>admin.py</p>
  
  <pre><code>from django.contrib import admin
  from django.contrib.auth.admin import UserAdmin as DjangoUserAdmin
  from django.utils.translation import ugettext_lazy as _
  from .models import User
  
  @admin.register(User)
  class UserAdmin(DjangoUserAdmin):
      """Define admin model for custom User model with no email field."""
  
      fieldsets = (
          (None, {'fields': ('email', 'phone' ,'password',)}),
          (_('Personal info'), {'fields': ('first_name', 'last_name')}),
          (_('Permissions'), {'fields': ('is_active', 'is_staff', 'is_superuser',
                                         'groups', 'user_permissions')}),
          (_('Important dates'), {'fields': ('last_login', 'date_joined')}),
      )
      add_fieldsets = (
          (None, {
              'classes': ('wide',),
              'fields': ('email', 'password1', 'password2'),
          }),
      )
      list_display = ('email', 'first_name', 'last_name', 'is_staff')
      search_fields = ('email', 'first_name', 'last_name')
      ordering = ('email',)
  </code></pre>
  
  <p>Error appears</p>
  
  <pre><code>Unknown field(s) (phone) specified for User. Check fields/fieldsets/exclude attributes of class UserAdmin.
  </code></pre>
  
  <p>My custom user model</p>
  
  <p><strong>models.py</strong></p>
  
  <pre><code>from django.contrib.auth.models import AbstractUser, BaseUserManager
  from django.db import models
  from django.utils.translation import ugettext_lazy as _
  
  
  class UserManager(BaseUserManager):
      """Define a model manager for User model with no username field."""
  
      use_in_migrations = True
  
      def _create_user(self, email, password, **extra_fields):
          """Create and save a User with the given email and password."""
          if not email:
              raise ValueError('The given email must be set')
          email = self.normalize_email(email)
          user = self.model(email=email, **extra_fields)
          user.set_password(password)
          user.save(using=self._db)
          return user
  
      def create_user(self, email, password=None, **extra_fields):
          """Create and save a regular User with the given email and password."""
          extra_fields.setdefault('is_staff', False)
          extra_fields.setdefault('is_superuser', False)
          return self._create_user(email, password, **extra_fields)
  
      def create_superuser(self, email, password, **extra_fields):
          """Create and save a SuperUser with the given email and password."""
          extra_fields.setdefault('is_staff', True)
          extra_fields.setdefault('is_superuser', True)
  
          if extra_fields.get('is_staff') is not True:
              raise ValueError('Superuser must have is_staff=True.')
          if extra_fields.get('is_superuser') is not True:
              raise ValueError('Superuser must have is_superuser=True.')
  
          return self._create_user(email, password, **extra_fields)
  
  class User(AbstractUser):
      """User model."""
  
      username = None
      email = models.EmailField(_('email address'), unique=True)
  
  
      USERNAME_FIELD = 'email'
      REQUIRED_FIELDS = []
  
      objects = UserManager()
  </code></pre>