Django字段选择:避免重复值和人类可读的形式?

时间:2015-08-28 19:31:15

标签: django

我有很多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'是值是人类可读的形式?

1 个答案:

答案 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']