我有很多Field
次设置有限choices
。对于所有这些,人类可读的形式与字段的存储值相同。例如,
color = models.CharField(max_length=20,
choices=[('blue', 'blue'),
('red', 'red'),
('yellow', 'yellow')
('green', 'green'),
('pink', 'pink')])
我不想对每种选择进行双重打字。有没有办法可以写出这样的东西:
color = models.CharField(max_length=20,
choices=['blue',
'red',
'yellow',
'green',
'pink'])
并且Django自动发现'red'
是值和是人类可读的形式?
答案 0 :(得分:4)
Django期待一系列2元组,你无法真正做到而不是期望(至少不修改Django)。
幸运的是,使用常规列表和Python内置函数创建此结构非常容易:
In [4]: choices = list('abcde')
In [5]: choices = tuple(zip(choices, choices))
In [6]: choices
Out[6]: (('a', 'a'), ('b', 'b'), ('c', 'c'), ('d', 'd'), ('e', 'e'))
正如OP在评论中指出的那样,您也可以轻松地将其作为列表组合:
choices = [(c, c) for c in 'abcde']