title: django-allauth: custom user generates IntegrityError at /accounts/signup/ (custom fields are nulled or lost)
body: <p>I'm trying to integrate django-allauth with a custom user model (subclassed AbstractUser, but when I test the signup form I get an integrity error due to field (date_of_birth) being null, but the value submitted was u'1976-4-6'</p>
  
  <p>I'm learning the new custom user stuff, as well as class-based views as I'm learning django-allauth, so I'm confident that I'm doing something wrong, but after a couple days of reading the github issues, the few tutorials, readthedocs, and stackoverflow questions I still have no clear idea of what I'm doing wrong (well I know one thing I'm doing wrong:  trying different solutions here and there, so I definitely have a miss-mosh of implementations)</p>
  
  <p>But, I can't find a good answer on how to integrate allauth with a subclassed AbstractUser, so if anyone could enlighten me, I would really appreciate it. </p>
  
  <p>(Note - the site is more or less working when I log in as a user that I've loaded via fixtures, so please assume that non-django-allauth omissions are omissions - if you need clarification on something not below, I will happily edit)</p>
  
  <h3>settings.py</h3>
  
  <pre class="lang-python prettyprint-override"><code>AUTH_USER_MODEL = 'userdata.CtrackUser'
  ACCOUNT_AUTHENTICATION_METHOD = 'username_email'
  ACCOUNT_SIGNUP_FORM_CLASS = 'userdata.forms.SignupForm'
  LOGIN_REDIRECT_URL = '/profile'
  SOCIALACCOUNT_QUERY_EMAIL = True
  SOCIALACCOUNT_AUTO_SIGNUP = False
  ACCOUNT_USER_MODEL_USERNAME_FIELD = 'username'
  </code></pre>
  
  <h3>userdata/models.py</h3>
  
  <pre class="lang-python prettyprint-override"><code>class CtrackUser(AbstractUser):
      date_of_birth = models.DateField(help_text='YYYY-MM-DD format')
      gender = models.CharField(max_length=2, 
      choices=settings.GENDER_CHOICES, blank=True)
      race = models.CharField(max_length=2, choices=settings.RACE_CHOICES, null=True, blank=True)
      condition = models.ForeignKey(Condition, null=True, blank=True)
      location = models.CharField(max_length=255, null=True, blank=True)
      my_symptoms = models.ManyToManyField(Symptom)
      is_admin = models.BooleanField(default=False)
      created = models.DateTimeField(auto_now_add=True)
      modified = models.DateTimeField(auto_now=True)
  </code></pre>
  
  <h3>userdata/forms.py</h3>
  
  <pre class="lang-python prettyprint-override"><code>from django import forms
  from django.conf import settings
  from django.contrib.auth import get_user_model
  from allauth.account.forms import SetPasswordField, PasswordField
  from crispy_forms.helper import FormHelper
  from crispy_forms.layout import Submit
  from medical.models import Condition
  
  
  class SignupForm(forms.Form):
  
      email = forms.EmailField(required=True,)
      username = forms.CharField(max_length=80,required=True,)
      password1 = SetPasswordField()
      password2 = PasswordField()
      first_name = forms.CharField(max_length=100,required=False,)
      last_name = forms.CharField(max_length=100, required=False,)
      date_of_birth = forms.DateField()   
      gender = forms.TypedChoiceField(
          choices=settings.GENDER_CHOICES,
          widget=forms.Select(attrs={'class': 'input-lg'}),
          required=False,)
      race = forms.TypedChoiceField(
          choices=settings.RACE_CHOICES,
          widget=forms.Select(attrs={'class': 'input-lg'}),
          required=False,)
      location = forms.CharField(max_length=255,required=False,)
      condition = forms.ModelChoiceField(
          queryset=Condition.objects.all(),
          widget=forms.Select(attrs={'class': 'input-lg'}),
          empty_label='Select condition (optional)'
      )
  
      class Meta:
          model = get_user_model() # use this function for swapping user model
          fields = ('email', 'username', 'password1',  'password2', 'first_name', 'last_name',
                    'date_of_birth', 'gender', 'race', 'location', 'condition', 'confirmation_key',)
  
      def __init__(self, *args, **kwargs):
          super(SignupForm, self).__init__(*args, **kwargs)
          self.helper = FormHelper()
          self.helper.form_id = 'signup_form'
          self.helper.label_class = 'col-xs-6'
          self.helper.field_class = 'col-xs-12'
          self.helper.form_method = 'post'
          self.helper.form_action = 'accounts_signup'
          self.helper.add_input(Submit('submit', 'Sign up'))
  
      def signup(self, request, user, model):
          user.username = self.cleaned_data['username']
          user.first_name = self.cleaned_data['first_name']
          user.last_name = self.cleaned_data['last_name']
          model.date_of_birth = self.cleaned_data['date_of_birth']
          model.gender = self.cleaned_data['gender']
          model.race = self.cleaned_data['race']
          model.location = self.cleaned_data['location']
          model.condition = self.cleaned_data['condition']
          model.save()
          user.save()
  </code></pre>
  
  <h3>templates/allauth/account/signup.html</h3>
  
  
  
  <pre><code>&lt;form id="signup_form" method="post" action="{% url 'account_signup' %}" class="form-inline"&gt;
    {% csrf_token %}
    {% crispy form %}
    {% if redirect_field_value %}
    &lt;input type="hidden" name="{{ redirect_field_name }}" value="{{ redirect_field_value }}" /&gt;
    {% endif %}
  {#  &lt;div class="form-actions"&gt;#}
  {#  &lt;button class="btn btn-primary" type="submit"&gt;Sign Up&lt;/button&gt;#}
  {#  &lt;/div&gt;#}
  &lt;/form&gt;
  </code></pre>
  
  <h3>POST data</h3>
  
  <pre><code>u'condition'  [u'1']
  u'confirmation_key' [u'']
  u'date_of_birth' [u'1976-4-6']
  u'email' [u'1@bt.co']
  u'first_name' [u'One']
  u'gender' [u'']
  u'last_name' [u'Person']
  u'location' [u''] u'password1' [u'123456'] 
  u'password2' [u'123456']
  u'race' [u'']
  u'submit' [u'Sign up']
  u'username' [u'gn']
  </code></pre>
  
  <h3>Error generated (note difference from post data)</h3>
  
  <p>Exception Type: IntegrityError at /accounts/signup/</p>
  
  <p>Exception Value: null value in column "date_of_birth" violates not-null constraint</p>
  
  <p>DETAIL:  Failing row contains (19, pbkdf2_sha256$12000$exNVzh4QI0Rb$mCTz9Tc+TIBbD8+lIZs2B3hqjxd+qmI..., 2014-07-02 16:27:43.751428+00, f, gn, One, Person, 1@bt.co, f, t, 2014-07-02 16:27:43.751473+00, null, , null, null, null, f, 2014-07-02 16:27:43.833267+00, 2014-07-02 16:27:43.83329+00).</p>
  
  <p>Full traceback here:
  <a href="https://gist.githubusercontent.com/hanleybrand/ee260b53dfb404f5055a/raw/3325dc746120c4f7521b9b976abce45dd7d71a77/gistfile1.txt" rel="noreferrer">https://gist.githubusercontent.com/hanleybrand/ee260b53dfb404f5055a/raw/3325dc746120c4f7521b9b976abce45dd7d71a77/gistfile1.txt</a></p>