title: Django - Handling "enum models"
body: <p>Is there any best practice in handling "support tables" in Django?</p>
  
  <p>I dislike <code>Field.choices</code>, as it doesn't really enforce integrity (it doesn't even create check constraints), so I prefer creating a full-blown model (and often, I find myself adding additional fields in the support table).</p>
  
  <p>Now, if I use a full model, I suppose the right way to go is to create an initial data fixture for the table content, but is there a "right way" to have named instances of the row, say...</p>
  
  <pre><code>class State(models.Model):
      name = model.TextField()
  
  STATES = dict(
      NEW=State.objects.get(pk=0),
      IN_PROGRESS=State.objects.get(pk=1),
  )
  </code></pre>
  
  <p>... or something like that.</p>
  
  <p>What do <em>you</em> use?</p>