21. Specifying 'choices' for a field
This example is for Django's SVN release, which can be significantly different from previous releases. Get old examples here: 0.96, 0.95.
Most fields take a choices parameter, which should be a tuple of tuples specifying which are the valid values for that field.
For each field that has choices, a model instance gets a get_fieldname_display() method, where fieldname is the name of the field. This method returns the “human-readable” value of the field.
Model source code
from django.db import models
GENDER_CHOICES = (
('M', 'Male'),
('F', 'Female'),
)
class Person(models.Model):
name = models.CharField(max_length=20)
gender = models.CharField(max_length=1, choices=GENDER_CHOICES)
def __unicode__(self):
return self.name
Sample API usage
This sample code assumes the above model has been saved in a file mysite/models.py.
>>> from mysite.models import Person >>> a = Person(name='Adrian', gender='M') >>> a.save() >>> s = Person(name='Sara', gender='F') >>> s.save() >>> a.gender 'M' >>> s.gender 'F' >>> a.get_gender_display() u'Male' >>> s.get_gender_display() u'Female' # If the value for the field doesn't correspond to a valid choice, # the value itself is provided as a display value. >>> a.gender = '' >>> a.get_gender_display() u'' >>> a.gender = 'U' >>> a.get_gender_display() u'U'

