title: Django error: needs to have a value for field "..." before this many-to-many relationship can be used
body: <p>When saving a form I am getting this error:
  "" needs to have a value for field "surveythread" before this many-to-many relationship can be used.</p>
  
  <p>Models.py:</p>
  
  <pre><code>class SurveyResult(models.Model):
      stay = models.OneToOneField(Stay, related_name='survey')
      created = models.DateTimeField(default=datetime.now)
      vote = models.BooleanField(default=False)
      vote_service = models.BooleanField(default=False)
      comment = models.TextField(blank=True, null=True)
  
      def getThreads(self):
          return SurveyThread.objects.filter(parent_survey = self)
  
      threads = property(getThreads)
  
      def __unicode__(self):
          return self.vote and 'Good' or 'Bad'
  
      class Meta:
          get_latest_by = '-created'
  
  class SurveyThread(models.Model):
      survey = models.ManyToManyField(SurveyResult, related_name='parent_survey')
      email = models.EmailField(max_length=200)
      comment = models.TextField(blank=True, null=True)
  </code></pre>
  
  <p>views.py:</p>
  
  <pre><code>survey_list = SurveyResult.objects.filter(stay__guest__user=request.user) \
                                        .select_related('stay', 'stay__guest')
  
  forms = {}
  for survey in survey_list:
    forms[survey] = SurveyThreadForm(data=request.POST or None, survey=survey)
  
    if forms[survey].is_valid():
      instance = forms[survey].save()
      return redirect('.')
  </code></pre>
  
  <p>forms.py</p>
  
  <pre><code>class SurveyThreadForm(forms.Form):
  
      comment = forms.CharField(required=False, widget=forms.Textarea)
  
      def __init__(self, *args, **kwargs):
          self.survey = kwargs.pop('survey', None)
  
          if not self.survey:
              raise NotImplementedError("SurveyResult object is required at this moment")
  
          super(SurveyThreadForm, self).__init__(*args, **kwargs)
  
          self.fields['comment'].label = "Message to send to guest:"
  
      def save(self, commit=True):
          s = SurveyThread()
          s.survey = self.survey
          s.email = "test@test.com"
          s.comment = self.cleaned_data['comment']
  
          if commit:
              s.save()
          return s
  </code></pre>
  
  <p>Error Message:</p>
  
  <pre><code>ValueError at /
  "&lt;SurveyThread: SurveyThread object&gt;" needs to have a value for field "surveythread" before this many-to-many relationship can be used.
  Request Method: POST
  Request URL:    http://127.0.0.1:8000/
  Django Version: 1.5.1
  Exception Type: ValueError
  Exception Value:    
  "&lt;SurveyThread: SurveyThread object&gt;" needs to have a value for field "surveythread" before this many-to-many relationship can be used.
  Exception Location: /Users/tlovett1/.virtualenvs/guestretain/lib/python2.7/site-packages/django/db/models/fields/related.py in __init__, line 586
  Python Executable:  /Users/tlovett1/.virtualenvs/guestretain/bin/python
  Python Version: 2.7.2
  Python Path:    
  ['/Users/tlovett1/guestretain',
   '/Users/tlovett1/.virtualenvs/guestretain/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg',
   '/Users/tlovett1/.virtualenvs/guestretain/lib/python2.7/site-packages/pip-1.3.1-py2.7.egg',
   '/Users/tlovett1/.virtualenvs/guestretain/lib/python27.zip',
   '/Users/tlovett1/.virtualenvs/guestretain/lib/python2.7',
   '/Users/tlovett1/.virtualenvs/guestretain/lib/python2.7/plat-darwin',
   '/Users/tlovett1/.virtualenvs/guestretain/lib/python2.7/plat-mac',
   '/Users/tlovett1/.virtualenvs/guestretain/lib/python2.7/plat-mac/lib-scriptpackages',
   '/Users/tlovett1/.virtualenvs/guestretain/Extras/lib/python',
   '/Users/tlovett1/.virtualenvs/guestretain/lib/python2.7/lib-tk',
   '/Users/tlovett1/.virtualenvs/guestretain/lib/python2.7/lib-old',
   '/Users/tlovett1/.virtualenvs/guestretain/lib/python2.7/lib-dynload',
   '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7',
   '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin',
   '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk',
   '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac',
   '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages',
   '/Users/tlovett1/.virtualenvs/guestretain/lib/python2.7/site-packages',
   '/Users/tlovett1/.virtualenvs/guestretain/lib/python2.7/site-packages/PIL']
  Server time:    Sun, 7 Jul 2013 10:22:55 -0500
  </code></pre>
  
  <p>Traceback:</p>
  
  <pre><code>Traceback Switch to copy-and-paste view
  
  /Users/tlovett1/.virtualenvs/guestretain/lib/python2.7/site-packages/django/core/handlers/base.py in get_response
                          response = callback(request, *callback_args, **callback_kwargs) ...
  ▶ Local vars
  /Users/tlovett1/guestretain/retain/apps/profiles/utils.py in _wrapped_view
                      return view_func(request, *args, **kwargs) ...
  ▶ Local vars
  /Users/tlovett1/.virtualenvs/guestretain/lib/python2.7/site-packages/endless_pagination/decorators.py in decorated
              return view(request, *args, **kwargs) ...
  ▶ Local vars
  /Users/tlovett1/guestretain/retain/apps/dashboard/views.py in dashboard
              instance = forms[survey].save() ...
  ▶ Local vars
  /Users/tlovett1/guestretain/retain/apps/surveys/forms.py in save
          s.survey = self.survey ...
  ▶ Local vars
  /Users/tlovett1/.virtualenvs/guestretain/lib/python2.7/site-packages/django/db/models/fields/related.py in __set__
          manager = self.__get__(instance) ...
  ▶ Local vars
  /Users/tlovett1/.virtualenvs/guestretain/lib/python2.7/site-packages/django/db/models/fields/related.py in __get__
              through=self.field.rel.through, ...
  ▶ Local vars
  /Users/tlovett1/.virtualenvs/guestretain/lib/python2.7/site-packages/django/db/models/fields/related.py in __init__
                                   (instance, source_field_name)) ...
  ▶ Local vars
  </code></pre>
  
  <p>I'm new to Django and Python. I can post the debug trace or migration file if needed, but I have a feeling it's a simple fix. Obviously the point is I want to save multiple survey thread for each survey result.</p>
  
  <p>Thanks!</p>