【发布时间】:2012-06-20 18:27:12
【问题描述】:
我的 django 管理表单没有显示给定对象数据的正确初始值。我尝试修改表单以在加载时显式设置初始值,但这也没有效果。我的代码如下所示:
DISCOUNT_OVERRIDE_CHOICES = (
(None, ""),
(Decimal('10'), _('10%')),
(Decimal('20'), _('20%')),
(Decimal('30'), _('30%')),
(Decimal('40'), _('40%')),
(Decimal('50'), _('50%')),
)
self.fields['discount'].choices = \
DISCOUNT_OVERRIDE_CHOICES
if self.instance.discount:
self.initial['discount'] = \
self.instance.discount
上面的代码是我稍后在适当的 Admin 模型中使用 form = MyForm 调用的表单的一部分。发生的情况是管理页面将正确加载并显示所有适当的数据,但“折扣”字段的初始值将始终为空字符串,无选项,并且永远不会准确表示与对象一起存储的折扣百分比其数据填充表单。该字段也是唯一发生这种情况的字段,即使我不覆盖可用选项,问题仍然存在(在这种情况下,页面加载时始终选择 10% 选项)
有什么想法吗?提前致谢。
【问题讨论】:
-
discount是models.DecimalField的实例吗? -
是的。在那种情况下我可以不设置 None 选项吗?
-
您不必设置初始值,因为 Django 将始终使用来自
ModelForm实例的数据预先填充表单。您是否可能覆盖了表单,尤其是表单上的discount字段?它必须始终保持为DecimalField,否则该值将不是Decimal类型,因此与您的选择不匹配。
标签: python django django-admin