我有一个这样的模型:
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
参数的来源?我没有在消息来源中找到它,但也许我做错了什么?这是一个已知的限制吗?
我可以使用在deepcopy
上应用DAYS
的解决方法。但我不认为这是好风格。还有另一种方式吗?
答案 0 :(得分:3)
使用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
时,它会返回您期望的结果。但是,生成器已被使用,因此当您尝试获取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))
[]
>>>