一些具有相同选择源的 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))
[]
>>>
我有这样一个模型:
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))
[]
>>>