【问题标题】:Django Admin Form Not Showing All Instance DataDjango 管理表单未显示所有实例数据
【发布时间】: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% 选项)

有什么想法吗?提前致谢。

【问题讨论】:

  • discountmodels.DecimalField 的实例吗?
  • 是的。在那种情况下我可以不设置 None 选项吗?
  • 您不必设置初始值,因为 Django 将始终使用来自ModelForm 实例的数据预先填充表单。您是否可能覆盖了表单,尤其是表单上的 discount 字段?它必须始终保持为DecimalField,否则该值将不是Decimal 类型,因此与您的选择不匹配。

标签: python django django-admin


【解决方案1】:

你的这部分代码是错误的

self.initial['discount'] = \
                self.instance.discount

你应该这样做

self.fields['discount'].initial = \
                self.instance.discount

【讨论】:

  • 感谢您的回答。我也试过了,结果一样。还有其他想法吗?
  • 由于上述方法在其他地方不起作用,是您的问题。您必须公开更多代码。
  • 另外,我希望您粘贴的代码在表单的__init__ 中“存在”。否则没有意义。
猜你喜欢
  • 1970-01-01
  • 2022-11-15
  • 2013-09-16
  • 2017-06-21
  • 2013-07-07
  • 1970-01-01
  • 2012-09-05
  • 2011-01-23
  • 2016-05-27
相关资源
最近更新 更多