title: create_user() takes from 2 to 4 positional arguments but 6 were given
body: <p>after i fill the registration form and click submit this error pops up
  "create_user() takes from 2 to 4 positional arguments but 6 were given"
  and also it doesn't use the validation inside the form in the template</p>
  
  <p>doesn't check if the username or email are already in the database or even checking if the the passwords are matching or not</p>
  
  <p>forms.py</p>
  
  <pre><code>from django import forms
  from django.contrib.auth.forms import UserCreationForm
  from django.contrib.auth.models import User
  from django.forms.widgets import PasswordInput, TextInput
  from django.core.exceptions import ValidationError
  
  
  
  class CustomUserCreationForm(forms.Form):
      username = forms.CharField(widget=TextInput(attrs={'class':'validate','id': 'icon_prefix', 'type': 'text'}), min_length=4, max_length=150)
      email = forms.EmailField(widget=TextInput(attrs={'class':'validate','id': 'icon_prefix', 'type': 'text'}))
      first_name = forms.CharField(widget=TextInput(attrs={'class':'validate','id': 'icon_prefix', 'type': 'text'}), min_length=2, max_length=150)
      last_name = forms.CharField(widget=TextInput(attrs={'class':'validate','id': 'icon_prefix', 'type': 'text'}), min_length=2, max_length=150)
      password1 = forms.CharField(widget=PasswordInput(attrs={'class':'validate','id': 'icon_prefix', 'type': 'password'}))
      password2 = forms.CharField(widget=PasswordInput(attrs={'class':'validate','id': 'icon_prefix', 'type': 'password'}))
  
  
  
  def clean_username(self):
      username = self.cleaned_data['username'].lower()
      r = User.objects.filter(username=username)
      if r.count():
          raise  ValidationError("Username already exists")
      return username
  
  def clean_first_name(self):
      first_name = self.cleaned_data['first_name']
  
      return first_name
  
  def clean_last_name(self):
      last_name = self.cleaned_data['last_name']
  
      return last_name
  
  def clean_email(self):
      email = self.cleaned_data['email'].lower()
      r = User.objects.filter(email=email)
      if r.count():
          raise  ValidationError("Email already exists")
      return email
  
  def clean_password2(self):
      password1 = self.cleaned_data.get('password1')
      password2 = self.cleaned_data.get('password2')
  
      if password1 and password2 and password1 != password2:
          raise ValidationError("Password don't match")
  
      return password2
  
  def save(self, commit=True):
      user = User.objects.create_user(
          self.cleaned_data['username'],
          self.cleaned_data['first_name'],
          self.cleaned_data['last_name'],
          self.cleaned_data['email'],
          self.cleaned_data['password1']
      )
      return user
  </code></pre>