django modelform属性隐藏字段

时间:2016-02-26 19:53:50

标签: django properties hidden-field modelform

我手动将表单集显示为表格,每个表单都循环播放。在每个表单的底部,我包含隐藏的字段,如:

{% for hidden in form.hidden_fields %}
    {{ hidden }}
{% endfor %}

但问题是我还在我的表单中包含属性,如:

class AllocationForm(forms.ModelForm):
    name = forms.CharField(widget=forms.TextInput(attrs={'size': '15'}))

    def __init__(self, *args, **kwargs):
        super(AllocationForm, self).__init__(*args, **kwargs)
        if self.instance:
            self.fields['total_budgeted'] = self.instance.total_budgeted()
            self.fields['total_budgeted_account_percent'] = self.instance.total_budgeted_account_percent()
            self.fields['actual_spent'] = self.instance.actual_spent()
            self.fields['actual_spent_account_percent'] = self.instance.actual_spent_account_percent()
            self.fields['total_budgeted_category_percent'] = self.instance.total_budgeted_category_percent()
            self.fields['actual_spent_category_percent'] = self.instance.actual_spent_category_percent()

    class Meta:
        model = Allocation
        exclude = {'created', 'modified', 'source_account'}

这在某种意义上起作用,我肯定会看到被调用的属性,但它们显示为什么都没有,这是另一个问题。

问题是,当我将隐藏字段保留在模板中时,我会收到错误,例如' int'对象没有属性' get_bound_field'依赖于属性/方法调用的返回类型。

我的问题是第一次:我是否可以检查该字段是否是模板中的属性,因此可以跳过它? 它可能与我如何使用该属性有关,因为事实上每个属性都没有显示(但我看到它回调),所以第二将是关于如何显示属性。

1 个答案:

答案 0 :(得分:5)

我正处于问题的下一步,但我已成功生成真正的表单字段。取代:

if self.instance:
    self.fields['total_budgeted'] = self.instance.total_budgeted()

你可以写:

if self.instance:
    self.fields['total_budgeted'] = form.CharField(
        initial=self.instance.total_budgeted(),
        widget=HiddenInput()
    )

在此代码中,我将表单Field实例化为CharField,您可以使用所需的FormField,并通过选择隐藏的输入小部件来隐藏它。