【问题标题】:Cannot have multiple model fields with same choices不能有多个具有相同选择的模型字段
【发布时间】:2013-10-22 00:06:33
【问题描述】:

在我的 django 模型中,我尝试设置如下字段:

mouth = models.DecimalField(choices=SCALE, max_digits=2, decimal_places=1)
nose = models.DecimalField(choices=SCALE, max_digits=2, decimal_places=1)
persistance = models.DecimalField(choices=SCALE, max_digits=2, decimal_places=1)
rating = models.DecimalField(choices=SCALE, max_digits=2, decimal_places=1)

选择是这样全局定义的:

SCALE = ( (0.5*x, str(0.5*x)) for x in xrange(1,11) )

我在我的 admin.py 文件中注册了这些字段。 我遇到的问题是只有定义的第一个字段(在本例中是嘴)才会显示选择列表。其他的根本不会显示任何列表。当我创建一个 ModelForm 实例并将其输出到模板中时,也会发生同样的情况:我没有得到其他字段的列表。

另外,如果我尝试反转字段的顺序,它仍然是第一个正确显示的,所以它与嘴字段本身无关。

我需要传递一个选项以使字段更加“独特”吗?

【问题讨论】:

  • @Liarez:这是一个生成器表达式。

标签: python django admin models


【解决方案1】:

在您的定义中,SCALE 是一个生成器表达式,而不是一个序列,因此生成器很可能在第一次迭代后耗尽(在您使用它的第一个字段上)。尝试使用列表推导,即SCALE = [(0.5*x, str(0.5*x)) for x in xrange(1,11)]

【讨论】:

  • 确实如此!我想这也是为什么建议在模型类中定义选项的原因,这样如果你将它重用于其他字段,它就不太可能耗尽生成器。
  • 使生成器成为类属性不会改变任何东西 - 一旦生成器耗尽,它就耗尽了,期间。在模型中定义选择(通常)更好的原因主要是局部性和内聚性。
猜你喜欢
  • 2011-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-17
  • 1970-01-01
  • 2016-03-11
  • 1970-01-01
  • 2018-07-12
相关资源
最近更新 更多