Django模型选项列表(django models choices list)

2019-09-30 08:28发布

我使用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与谷歌搜索和冲刷的文档,但我坚持,我兜兜转转。

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

不过,我想如下所显示的选择列表:

Answer 1:

你应该换在另一个元组的最后一个元组:

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')),))
)


Answer 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)"


文章来源: django models choices list