一些具有相同选择源的 Django ChoiceFields

Some Django ChoiceFields with the same choice source

我有这样一个模型:

class MyModel(models.Model):
    DAYS = ((str(d), str(d)) for d in range(1, 29))

    day1 = models.CharField('Day 1', max_length=3, null=True, blank=True, choices=DAYS)
    day2 = models.CharField('Day 2', max_length=3, null=True, blank=True, choices=DAYS)

呈现后,我看到只有字段 day1 有选择列表,但 day2 是空的。如果我用相同的定义创建另一个常量 DAYS2 并将其分配给 day2 - 它有效。

Django 似乎修改了 choices 参数的来源?我没有在消息来源中找到它,但也许我做错了什么?这是已知的限制吗?

我可以使用在 DAYS 上应用 deepcopy 的解决方法。但我不认为这是好的风格。还有别的办法吗?

DAYS 使用列表:

class MyModel(models.Model):
    DAYS = [str(d), str(d)) for d in range(1, 29)]
    day1 = models.CharField('Day 1', max_length=3, null=True, blank=True, choices=DAYS)
    day2 = models.CharField('Day 2', max_length=3, null=True, blank=True, choices=DAYS)

目前,DAYS 是一个生成器。当您第一次访问它以获得 day1 的选择时,它会 returns 您期望的结果。但是,生成器随后已被消耗,因此当您尝试获取 day2.

的选项时,您会得到一个空列表

您可以通过在 Python shell 中尝试以下操作来查看:

>>> DAYS = ((str(d), str(d)) for d in range(1,5))
>>> print(list(DAYS))
[('1', '1'), ('2', '2'), ('3', '3'), ('4', '4')]
>>> print(list(DAYS))
[]
>>>