我想在模板中手动呈现表单,但是我尝试的结果没有达到预期的结果,而且为什么也不清楚。
class MyForm(forms.Form):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['field1'] = forms.BooleanField()
self.fields['field2'] = forms.BooleanField()
systems = System.objects.all()
for i in range(len(systems)):
self.fields['s' + str(i)] = forms.BooleanField()
self.fields['field3'] = forms.BooleanField()
self.initial_fields = [self.fields['field1'], self.fields['field2']]
现在当我在模板中执行此操作时
{% for field in form.visible_fields %}
{{ field }}
{% endfor %}
它返回您所期望的...在查找方法visible_fields
之后,它仅返回字段列表。因此,从理论上讲,如果我像self.initial_fields
一样创建自己的字段列表,则表单生成器应呈现与上面相同的内容:
{% for field in form.initial_fields %}
{{ field }}
{% endfor %}
但是我却在模板中得到以下输出:
<django.forms.fields.BooleanField object at 0x000001242F51E588>
<django.forms.fields.BooleanField object at 0x000001242F51E400>
我假设我缺少字段本身的一些初始化?我不明白为什么一个有效,而另一个无效。有人知道吗?
答案 0 :(得分:1)
您需要获取绑定的字段对象,而不是字段本身。这样做并不是一种干净的方法,但是如果您想破解它,则应该这样做,
...
self.initial_fields = [self.fields['field1'].get_bound_field(self, 'field1'),
self.fields['field2'].get_bound_field(self, 'field2')]
...
希望这会有所帮助!