title: Set Django IntegerField by choices=... name
body: <p>When you have a model field with a choices option you tend to have some magic values associated with human readable names. Is there in Django a convenient way to set these fields by the human readable name instead of the value?</p>
  
  <p>Consider this model:</p>
  
  <pre><code>class Thing(models.Model):
    PRIORITIES = (
      (0, 'Low'),
      (1, 'Normal'),
      (2, 'High'),
    )
  
    priority = models.IntegerField(default=0, choices=PRIORITIES)
  </code></pre>
  
  <p>At some point we have a Thing instance and we want to set its priority. Obviously you could do,</p>
  
  <pre><code>thing.priority = 1
  </code></pre>
  
  <p>But that forces you to memorize the Value-Name mapping of PRIORITIES. This doesn't work:</p>
  
  <pre><code>thing.priority = 'Normal' # Throws ValueError on .save()
  </code></pre>
  
  <p>Currently I have this silly workaround:</p>
  
  <pre><code>thing.priority = dict((key,value) for (value,key) in Thing.PRIORITIES)['Normal']
  </code></pre>
  
  <p>but that's clunky. Given how common this scenario could be I was wondering if anyone had a better solution. Is there some field method for setting fields by choice name which I totally overlooked?</p>