I’m reading the tutorial here: https://docs.djangoproject.com/en/1.5/ref/models/fields/#choices and i’m trying to create a box where the user can select the month he was born in. What I tried was
MONTH_CHOICES = ( (JANUARY, "January"), (FEBRUARY, "February"), (MARCH, "March"), .... (DECEMBER, "December"), ) month = CharField(max_length=9, choices=MONTHS_CHOICES, default=JANUARY)
Is this correct? I see that in the tutorial I was reading, they for some reason created variables first, like so
FRESHMAN = 'FR' SOPHOMORE = 'SO' JUNIOR = 'JR' SENIOR = 'SR'
Why did they create those variables? Also, the MONTHS_CHOICES is in a model called People, so would the code I provided create a “Months Choices) column in the database called called “People” and would it say what month the user was born in after he clicks on of the months and submits the form?
Advertisement
Answer
According to the documentation:
Field.choices
An iterable (e.g., a list or tuple) consisting itself of iterables of exactly two items (e.g. [(A, B), (A, B) …]) to use as choices for this field. If this is given, the default form widget will be a select box with these choices instead of the standard text field.
The first element in each tuple is the actual value to be stored, and the second element is the human-readable name.
So, your code is correct, except that you should either define variables JANUARY
, FEBRUARY
etc. or use calendar
module to define MONTH_CHOICES
:
import calendar ... class MyModel(models.Model): ... MONTH_CHOICES = [(str(i), calendar.month_name[i]) for i in range(1,13)] month = models.CharField(max_length=9, choices=MONTH_CHOICES, default='1')