所以.以下不是很"聪明";)
MONTHS = (
('Jan', 'Jan'),
('Feb', 'Feb'),
('Mar', 'Mar'),
('Apr', 'Apr'),
('May', 'May'),
('Jun', 'Jun'),
('Jul', 'Jul'),
('Aug', 'Aug'),
('Sep', 'Sep'),
('Oct', 'Oct'),
('Nov', 'Nov'),
('Dec', 'Dec'),
)
YEARS = (
('1995', '1995'),
('1996', '1996'),
('1997', '1997'),
('1998', '1998'),
('1999', '1999'),
('2000', '2000'),
('2001', '2001'),
('2002', '2002'),
('2003', '2003'),
('2004', '2004'),
('2005', '2005'),
('2006', '2006'),
('2007', '2007'),
('2008', '2008'),
('2009', '2009'),
('2010', '2010'),
)
Run Code Online (Sandbox Code Playgroud)
我是python的新手,并且喜欢制作像'pythonically'这样的东西.
如,
谢谢Stackers'
ars*_*ars 16
In [17]: from datetime import datetime
In [18]: tuple((str(n), str(n)) for n in range(1995, datetime.now().year + 1))
Out[18]:
(('1995', '1995'),
('1996', '1996'),
('1997', '1997'),
('1998', '1998'),
('1999', '1999'),
('2000', '2000'),
('2001', '2001'),
('2002', '2002'),
('2003', '2003'),
('2004', '2004'),
('2005', '2005'),
('2006', '2006'),
('2007', '2007'),
('2008', '2008'),
('2009', '2009'),
('2010', '2010'))
In [19]: import calendar
In [20]: tuple((m, m) for m in calendar.month_abbr[1:])
Out[20]:
(('Jan', 'Jan'),
('Feb', 'Feb'),
('Mar', 'Mar'),
('Apr', 'Apr'),
('May', 'May'),
('Jun', 'Jun'),
('Jul', 'Jul'),
('Aug', 'Aug'),
('Sep', 'Sep'),
('Oct', 'Oct'),
('Nov', 'Nov'),
('Dec', 'Dec'))
Run Code Online (Sandbox Code Playgroud)
尝试使用zip()列出两元组.
MONTHS = ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec')
somemonth = models.TextField(max_length=3, choices=zip(MONTHS,MONTHS))
Run Code Online (Sandbox Code Playgroud)
choices将被设置为[('Jan', 'Jan'), ('Feb', 'Feb'), ...].
针对这个答案的评论,"元组"列表理解版本将是:
tuple((m, m) for m in MONTHS)
Run Code Online (Sandbox Code Playgroud)
与拉链版本对比:
tuple(zip(MONTHS, MONTHS))
Run Code Online (Sandbox Code Playgroud)
但严格地说,Django不需要一个选择元组,所以:
zip(MONTHS, MONTHS)
Run Code Online (Sandbox Code Playgroud)