Django表单动态字段无效但无错误
我正在使用一个Django表单,这个表单可以根据传入的参数动态生成多个字段,正如我在SO
上学到的那样,代码如下:
class Review_Form(forms.Form):
def __init__(self, *args, **kwargs):
sentences = kwargs.pop('sentences')
super(Review_Form, self).__init__(*args, **kwargs)
counter = 1
for q in sentences:
self.fields['review' + str(counter)] = forms.CharField(label='Review' + str(counter), required=False)
counter += 1
关于对应的HTML,我把每个字段单独传入contest['block']
,其中block
是一个字典的列表,字典里的键值对表示表单的第i
个字段和我需要的相应项目。
所以生成的HTML如下:
<form action="{% url 'done_review' title%}" method="post">
<div class="container">
<div class="row">
{% for b in block %}
<div class="8u">
<p> {{b.sent}} </p>
</div>
<div class="4u">
<input class="front_form-control" value="{{b.text}}" type={{b.field}}
</div>
</div>
{% csrf_token %}
{% endfor %}
</div>
<div class="container">
<div class="row">
<div class="12u">
<button class="btn btn-lg btn-info" type="submit" value="Submit">Done Review
</button>
</div>
</div>
</div>
{% csrf_token %}
</form>
然后,不幸的是,提交后表单并不有效。我尝试通过在views.py
中打印错误信息来测试,代码如下:
if form.is_valid():
# do something
else:
print form.errors, 'here1'
print form.non_field_errors(), 'here2'
field_errors = [(field.label, field.errors) for field in form]
print field_errors, 'here3'
打印出来的结果是这样的:
here1
here2
[('Review1', []), ('Review2', []), ...many more... ('Review38', [])] here3
我真的不明白为什么表单不有效,我在这里卡了好几天,谷歌了很多地方。希望有人能帮帮我。
非常感谢!!!
1 个回答
2
最后,问题解决了。
这个问题发生是因为表单没有绑定,这是我一个粗心的错误造成的:
form = Review_Form(sentences=sents)
而应该是这样的:
form = Review_Form(request.POST, sentences=sents)
我分享这个是因为我觉得这对像我一样的新开发者可能会有帮助。
如果你想了解更多关于未绑定和绑定表单的内容,可以从这里阅读:Django表单API