title: IntegrityError in Django
body: <p>I added A Many2Many field in one of my forms and now I am getting an IntegrityError on submit. The exact error text is </p>
  
  <blockquote>
    <p>IntegrityError at /add_person/ hireterm_person.mail_lists may not be NULL</p>
  </blockquote>
  
  <p>It worked fine until I added the new field. When I look at the POST data on the debug change, I see it being passed, so I don't know where the break occurs.</p>
  
  <p>Models</p>
  
  <pre><code>from django.db import models
  from django.forms import ModelForm
  from django import forms
  from django.contrib.auth.models import User
  
  class Mailists(models.Model):
      name = models.CharField(blank=True, max_length=100)
      email = models.CharField(blank=True, max_length=100)
  
      def __unicode__(self):
          return u'%s' % (self.name)
  
  class Person(models.Model):
      ROLE_CHOICES = (
          ('Mrkt', 'Marketing'),
          ('Fin/Off', 'Finance / Office'),
          ('Care', 'Care'),
          ('Sales', 'Sales'),
          )
      ROLE_TYPE = (
          ('Full', 'Full Time'),
          ('Part', 'Part Time'), 
          ('Intern', 'Intern'),
          )
  
      first_name = models.CharField(blank=True, max_length=100)
      last_name = models.CharField(blank=True, max_length=100)
      date_added = models.DateField(auto_now_add=True)
      date_start = models.DateField(auto_now=False)
      role = models.CharField(max_length=100, default = "", choices = ROLE_CHOICES)
      manager = models.ForeignKey('self', limit_choices_to = {'is_manager': True}, null=True, blank=True)
      title = models.CharField(blank=True, max_length=100)
      role_type = models.CharField(max_length=100, default = "", choices = ROLE_TYPE)
      laptop_needed = models.BooleanField(default=True)
      phone_needed = models.BooleanField(default=True)
      desk_loco = models.CharField(blank=True, max_length=100)
      mail_lists = models.ManyToManyField(Mailists, blank=True)
      notes = models.CharField(blank=True, max_length=500)
      is_manager = models.BooleanField(default=False)
      is_active = models.BooleanField(default=True)
  
      def __unicode__(self):
          return u'%s %s' % (self.first_name, self.last_name)
  
  class PersonForm(ModelForm):
      mail_lists = forms.ModelMultipleChoiceField(queryset=Mailists.objects.all(), widget=forms.CheckboxSelectMultiple(), required=False)
      class Meta:
          model = Person
  </code></pre>
  
  <p><strong>EDIT</strong></p>
  
  <p>I added mail_lists = request.POST.getlist('mail_lists'). When I add a print to this, the list returned is all of the check boxes, put the POST data is still a single string, the last box checked.</p>
  
  <p>Views</p>
  
  <pre><code>from hireterm.models import Person, Mailists, PersonForm
  from django.shortcuts import get_object_or_404, render
  from django.template import Context, loader
  from django.http import HttpResponseRedirect, HttpResponse
  from django.contrib.auth.decorators import login_required
  from django.contrib.auth import authenticate, login
  from django.contrib.auth import logout
  from django.core.mail import send_mail
  
  @login_required
  def home(request):
      return render(request, 'hireterm/home.html')
  
  def add_person(request):
      if request.method == 'POST':
          mail_lists = request.POST.getlist('mail_lists') 
          person_form = PersonForm(request.POST)
          if person_form.is_valid(): 
              person_form.save()
              return HttpResponseRedirect('/new_hire') # Redirect after POST
  
      else:
          person_form = PersonForm() # An unbound form
  
      return render(request, 'hireterm/additem.html', {
          'form': person_form,
      })
  </code></pre>