【发布时间】:2017-09-02 08:24:49
【问题描述】:
我正在尝试创建一个动态表单,其中包含不同数量的 CharField。我希望能够以我的形式在半任意的地方随意显示它们。我的方法是创建一个可迭代的函数来处理正确的 self.fields[INDEX]。但是,当我这样做时,我确实看到了:
<django.forms.fields.CharField object at 0x80bae6be0>
<django.forms.fields.CharField object at 0x80bae6f98>
<django.forms.fields.CharField object at 0x80bae6da0>
如何按预期进行 CharField() 渲染?
我的代码如下:
class ImplementationForm(forms.ModelForm):
"""
Specifies the implementation of a given control.
"""
class Meta:
model = Implementation
fields = ['implemented', 'scope', 'separate']
def __init__(self, *args, **kwargs):
control = kwargs.pop('control')
super(ImplementationForm, self).__init__(*args, **kwargs)
self.fields['separate'].widget.attrs.update({'class': 'separate'})
self.fields['scope'].widget.attrs.update({'class': 'scope'})
for substatement in control.substatement.all():
self.fields['statement_%s'%substatement.pk] = forms.CharField()
def subfield(self):
print("Comes herE")
for index in self.fields:
if index[:10] == 'statement_':
yield self.fields[index]
模板基本上是这样做的:
{% for x in myform.subfield %} {{ x }} {% endfor %}
【问题讨论】:
-
我建议使用
FormSet。它们提供您要求的开箱即用功能。