For usability on the "
score" page at
Sage Steps (free registration required if you want to check it out), we decided that the best method to present a date was a simple drop-down with, e.g. "February 2010" as the text.
I tried out several permutations with mixed luck, but then happened upon the following recipe:
def month_year():
today = date.today()
today = date(today.year, today.month, 1)
dates = []
for i in range(1,13):
if (today.month > i):
month = today.month - i
year = today.year
else:
month = 12-(i-today.month)
year = today.year - 1
mon = date(year, month, 1)
dates.append((mon, mon.strftime("%B %Y")))
dates.reverse()
return dates
This creates a set of tuples, e.g.: (date(2009,3,1), 'March 2009'),
month = DateField(widget=Select(choices=month_year()))
This will produce the drop-down as above, and
form.cleaned_data['month']
Will actually return a datetime.date object (trust me, that's a good thing).
Read more...