title: Django Forms: Show empty option that evaluates to None
body: <p>When using Django's <code>ModelChoiceField</code>, with required=False, an extra choice <code>('', '--------')</code> is generated automatically. When selecting this option, it ends up as <code>None</code> in the <code>cleaned_data</code>. How do I (idiomatically) reproduce this behavior when using a regular <code>ChoiceField</code>?</p>
  
  <p>Some things I've noted:</p>
  
  <ul>
  <li>I have not found any way to automatically add the tuple <code>('', '---------')</code> to the list of <code>choices</code>, so it appears to be required to add it manually. I feel there should be a way to add it to the choices by setting one of the parameters differently, so if that exists I would love to hear it.</li>
  <li>The conversion from <code>''</code> to <code>None</code> must still be done manually in the code that uses <code>cleaned_data</code>. This means the code that deals with <code>ModelChoiceField</code>s has to be subtly different from the <code>ChoiceField</code> code, which may possibly lead to subtle bugs. Again: if someone knows better idioms, I'd love to hear that.</li>
  <li><code>TypedChoiceField</code> does some magic handling of <code>''</code>. In particular, it does not offer it to the <code>coerce</code> function like one would expect.</li>
  </ul>
  
  <p>Consider the following code:</p>
  
  <pre><code>def int_or_none(s):
      if s.isnumeric():
          return int(s)
      return None
  
  class NoneForm(forms.Form):
      field = forms.TypedChoiceField(
        choices=[('', '--------'), ('1', 'One'), ('2', 'Two')],
        required=False, coerce=int_or_none)
  
  def home(request):
      if request.method == "POST":
          form = NoneForm(request.POST)
          if form.is_valid():
              assert type(form.cleaned_data['field']) in [int, type(None)]
              print form.cleaned_data['field']
  
      form = NoneForm()
      return HttpResponse(
        """&lt;form method="POST"&gt;""" +
        form.as_table() +
        """&lt;input type="submit"&gt;&lt;/form&gt;""")
  </code></pre>
  
  <p>The assertion above fails!</p>
  
  <p>Can it really be this hard to get Django's various versions of <code>ChoiceField</code> to clean to <code>None</code> in an idiomatic way?</p>