title: Combining two forms in one Django view
body: <p>I am working on adding more functionality to the polls app that is made in the official Django tutorial. One of the things I am working on is making Polls/Choices creatable by logged in users (instead of in an admin screen, where the tutorial leaves us).</p>
  <p>I am looking to create a view where a user can create the a Poll, and then as well include some Choices to associate to the Poll. The Django Admin automagically does it, and I am not sure how to go about writing this out in a view.</p>
  <p>To start with, these are my relevant files:</p>
  <p>models.py</p>
  <pre><code>import datetime
  
  from django.db import models
  from django.utils import timezone
  
  
  class Poll(models.Model):
      question_text = models.CharField(max_length=200)
      pub_date = models.DateTimeField('date published')
  
      def __unicode__(self):
          return self.question_text
  
      def was_published_recently(self):
          return self.pub_date &gt;= timezone.now() - datetime.timedelta(days=1)
  
      was_published_recently.admin_order_field = 'pub_date'
      was_published_recently.boolean = True
      was_published_recently.short_description = 'Published recently?'
  
  class Choice(models.Model):
      question = models.ForeignKey(Poll)
      choice_text = models.CharField(max_length=200)
      votes = models.IntegerField(default=0)
  
      def __unicode__(self):
          return self.choice_text
  </code></pre>
  <p>forms.py</p>
  <pre><code>from django import forms
  from .models import Poll, Choice
  from datetime import datetime
  
  class PollForm(forms.ModelForm):
      question_text = forms.CharField(max_length=200, help_text=&quot;Please enter the question.&quot;)
      pub_date = forms.DateTimeField(widget=forms.HiddenInput(), initial = datetime.now())
  
      class Meta:
          model = Poll
          fields = (&quot;__all__&quot;)
  
  class ChoiceForm(forms.ModelForm):
      choice_text = forms.CharField(max_length=200, help_text=&quot;Please enter choices.&quot;)
      votes = forms.IntegerField(widget=forms.HiddenInput(),initial=0)
      exclude = ('poll',)
  </code></pre>
  <p>views.py</p>
  <pre><code>def add_poll(request):
      # A HTTP POST?
      if request.method == 'POST':
          form = PollForm(request.POST)
  
          # Have we been provided with a valid form?
          if form.is_valid():
              # Save the new category to the database.
              form.save(commit=True)
  
              # Now call the index() view.
              # The user will be shown the homepage.
              return render(request, 'polls/index.html', {})
          else:
              # The supplied form contained errors - just print them to the terminal.
              print form.errors
      else:
          # If the request was not a POST, display the form to enter details.
          form = PollForm()
  
      # Bad form (or form details), no form supplied...
      # Render the form with error messages (if any).
      return render(request, 'polls/add_poll.html', {'form': form})
  </code></pre>
  <p>Currently, my view allows me a user to add a poll. I am just not sure how to go about adapting it to pass the entered text as the Poll model's question_text, to the Choice model, and in turn, the ChoiceForm.</p>