title: Too many values to unpack (expected 2) Django
body: <p>I am creating a form that contains a <code>ChoiceField</code> to which I establish the values of choice by means of view.</p>
  
  <p>According to Django documentation <a href="https://docs.djangoproject.com/en/1.11/ref/forms/fields/#django.forms.ChoiceField.choices" rel="nofollow noreferrer">ChoiceFields Choices</a> the election values must be:</p>
  
  <blockquote>
    <p>Either an iterable (e.g., a list or tuple) of 2-tuples to use as choices for this field, or a callable that returns such an iterable. This argument accepts the same formats as the choices argument to a model field.</p>
  </blockquote>
  
  <p>When loading the view, I do not get any problem. But when I try to get the value of the <code>ChoiceField</code> after validating the form in the view I get an error <code>Too many values to unpack (expected 2)</code>.</p>
  
  <p>I do not know if I am wrongly adding the values of choice in the <code>ChoiceField</code>. Although I suppose if it were this the view would not load either. What am I doing wrong ?</p>
  
  <p>forms.py</p>
  
  <pre><code>class FormAffiliateReport(forms.Form):
  
  ...
  
  referrals = forms.ChoiceField(choices=(), label='Choice Referral', widget=forms.Select(attrs={'class': 'form-control',}))
  
  def __init__(self, referrals, *args, **kwargs):
      super(FormAffiliateReport, self).__init__(*args, **kwargs)
      self.fields['referrals'].choices = referrals
  </code></pre>
  
  <p>views.py</p>
  
  <pre><code>def affiliate_report(request):
  if request.session.has_key('affiliate_code'):
      affiliates = []
      affiliate_code = request.session['affiliate_code']
      affiliates = get_affiliates(affiliates, affiliate_code)
      affiliates.sort(key=lambda affiliate: affiliate.name.title())
      if request.method == 'POST':
          form = FormAffiliateReport(request.POST)
          if form.is_valid():
              referrals = form.data['referrals']
              return render(request, 'blog/affiliate_report.html', {"affiliate_code": affiliate_code, "form": form})
      else:
          choices = ()
          for affiliate in affiliates:
              choices = choices + ((str(affiliate.code), affiliate.name),)
          form = FormAffiliateReport(choices)
  
      return render(request, 'blog/affiliate_report.html', {"affiliate_code": affiliate_code, "form": form})
  else:
      return redirect('home')
  </code></pre>
  
  <p>Traceback </p>
  
  <pre><code>File "C:\Users\pc\Environments\company\lib\site-packages\django\core\handlers\exception.py", line 41, in inner
  response = get_response(request)
  File "C:\Users\pc\Environments\company\lib\site-packages\django\core\handlers\base.py", line 187, in _get_response
  response = self.process_exception_by_middleware(e, request)
  File "C:\Users\pc\Environments\company\lib\site-packages\django\core\handlers\base.py", line 185, in _get_response
  response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "C:\Users\pc\Projects\company\blog\views.py", line 224, in affiliate_report
  return render(request, 'blog/affiliate_report.html', {"affiliate_code": affiliate_code, "form": form})
  File "C:\Users\pc\Environments\company\lib\site-packages\django\shortcuts.py", line 30, in render
  content = loader.render_to_string(template_name, context, request, using=using)
  File "C:\Users\pc\Environments\company\lib\site-packages\django\template\loader.py", line 68, in render_to_string
  return template.render(context, request)
  File "C:\Users\pc\Environments\company\lib\site-packages\django\template\backends\django.py", line 66, in render
  return self.template.render(context)
  File "C:\Users\pc\Environments\company\lib\site-packages\django\template\base.py", line 207, in render
  return self._render(context)
  File "C:\Users\pc\Environments\company\lib\site-packages\django\template\base.py", line 199, in _render
  return self.nodelist.render(context)
  File "C:\Users\pc\Environments\company\lib\site-packages\django\template\base.py", line 990, in render
  bit = node.render_annotated(context)
  File "C:\Users\pc\Environments\company\lib\site-packages\django\template\base.py", line 957, in render_annotated
  return self.render(context)
  File "C:\Users\pc\Environments\company\lib\site-packages\django\template\defaulttags.py", line 216, in render
  nodelist.append(node.render_annotated(context))
  File "C:\Users\pc\Environments\company\lib\site-packages\django\template\base.py", line 957, in render_annotated
  return self.render(context)
  File "C:\Users\pc\Environments\company\lib\site-packages\django\template\base.py", line 1046, in render
  return render_value_in_context(output, context)
  File "C:\Users\pc\Environments\company\lib\site-packages\django\template\base.py", line 1024, in render_value_in_context
  value = force_text(value)
  File "C:\Users\pc\Environments\company\lib\site-packages\django\utils\encoding.py", line 76, in force_text
  s = six.text_type(s)
  File "C:\Users\pc\Environments\company\lib\site-packages\django\utils\html.py", line 385, in &lt;lambda&gt;
  klass.__str__ = lambda self: mark_safe(klass_str(self))
  File "C:\Users\pc\Environments\company\lib\site-packages\django\forms\boundfield.py", line 41, in __str__
  return self.as_widget()
  File "C:\Users\pc\Environments\company\lib\site-packages\django\forms\boundfield.py", line 94, in as_widget
  attrs = self.build_widget_attrs(attrs, widget)
  File "C:\Users\pc\Environments\company\lib\site-packages\django\forms\boundfield.py", line 250, in build_widget_attrs
  if widget.use_required_attribute(self.initial) and self.field.required and self.form.use_required_attribute:
  File "C:\Users\pc\Environments\company\lib\site-packages\django\forms\widgets.py", line 690, in use_required_attribute
  return use_required_attribute and first_choice is not None and self._choice_has_empty_value(first_choice)
  File "C:\Users\pc\Environments\company\lib\site-packages\django\forms\widgets.py", line 673, in _choice_has_empty_value
  value, _ = choice
  ValueError: too many values to unpack (expected 2)
  </code></pre>