django模型选择列表

时间:2015-03-24 07:45:13

标签: django django-models django-1.7

我正在使用django 1.7.2,我已经获得了一些代码,可以将选择列表放在模型中。

以下是代码:

YOB_TYPES = Choices(*(
    ((0, 'select_yob', _(' Select Year of Birth')),
     (2000, 'to_present', _('2000 to Present'))) +
    tuple((i, str(i)) for i in xrange(1990, 2000)) +
    (1, 'unspecified', _('Prefer not to answer')))
)
....
year_of_birth_type = models.PositiveIntegerField(choices=YOB_TYPES, default=YOB_TYPES.select_yob, validators=[MinValueValidator(1)])
....

上面的代码给出了错误的选择列表,如下所示。我读了几篇SO帖子&谷歌搜索并搜索了文档,但我被困住了,我正在圈子里去。

这是当前代码显示选择列表的方式,这是错误的:

enter image description here

但是,我希望选择列表显示如下:

enter image description here

2 个答案:

答案 0 :(得分:2)

你应该将最后一个元组包装在另一个元组中:

YOB_TYPES = Choices(*(
    ((0, 'select_yob', _(' Select Year of Birth')),
     (2000, 'to_present', _('2000 to Present'))) +
    tuple((i, str(i)) for i in xrange(1990, 2000)) +
    ((1, 'unspecified', _('Prefer not to answer')),))
)

答案 1 :(得分:2)

1)在添加元组时必须小心 - 你需要在末尾设置一个逗号,以便python将其解释为元组:

YOB_TYPES = Choices(*(
    ((0, 'select_yob', _(' Select Year of Birth')),
     (2000, 'to_present', _('2000 to Present'))) +
    tuple((i, str(i)) for i in xrange(1990, 2000)) +
    ((1, 'unspecified', _('Prefer not to answer')),))
)

2)你必须根据你希望它们出现在列表中的顺序来订购 - 所以" 2000要呈现"应该将一个地方移到后面。

3)使用empty_label属性更有意义 - 并删除您选择的第一项:

empty_label="(Select Year fo Birth)"