以自定义表单呈现模板中的各个字段

Posted

技术标签:

【中文标题】以自定义表单呈现模板中的各个字段【英文标题】:Rendering individual fields in template in a custom form 【发布时间】:2013-09-09 14:31:08 【问题描述】:

在我的模板中呈现单个字段时遇到问题。我有一个呈现多选小部件和 Charfield 的自定义表单。我想单独渲染小部件和 Charfield,所以我可以将 Charfield 放在小部件的右侧而不是底部(这是 Django 默认所做的)。有没有办法在模板中调用我的表单中的各个字段?

forms.py

class UpdateStateOptionWithOutcomesForm(forms.ModelForm):

    def __init__(self, *args, **kwargs):
       disease=kwargs.pop('disease', None)
       super(UpdateStateOptionWithOutcomesForm, self).__init__(*args, **kwargs)
       self.fields['relevantoutcome']=forms.ModelMultipleChoiceField(queryset=Outcome.objects.filter(relevantdisease_id=disease),required=True, widget=forms.CheckboxSelectMultiple)
       self.fields['relevantoutcome'].label="Treatment Outcomes"

       outcome_qs=Outcome.objects.filter(relevantdisease_id=disease)
       for outcome in outcome_qs:
       self.fields['outcomevalue_%s' % outcome.pk] = forms.CharField(required=False)
       self.fields['outcomevalue_%s' % outcome.pk].label = "Outcome Value"

【问题讨论】:

【参考方案1】:

form.fieldname 将仅按其名称呈现字段小部件。

查看Customizing the form template。

【讨论】:

【参考方案2】:

以下代码可能对某人有所帮助。这是一种从form 获取带有fieldname 的渲染字段的方法:

form.fields[fieldname].get_bound_field(form, fieldname)

【讨论】:

我不太清楚它是如何工作的,但它似乎对我有用。我的表单中有一组动态字段,我需要根据它们的动态名称来呈现它们,这会返回要根据需要呈现的对象。这将有助于更好地了解它的作用/方式。

以上是关于以自定义表单呈现模板中的各个字段的主要内容,如果未能解决你的问题,请参考以下文章

自定义表单域渲染

Django 自定义表单字段错误地呈现值

模板和隐藏输入中的自定义 Django 表单

无法在 Liferay 7.2 中呈现自定义表单字段

如何避免在 OpenERP 7 中以自定义形式显示字段?

如何检查表单字段中是不是有呈现控制器的树枝模板中的数据