我一直在使用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
是字典列表,其中键值对指示表单的ith
字段,我需要的相应物品。
所以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
我真的不明白为什么这个表格无效,我已经被困在这里好几天了,并且谷歌到处都是。希望有人能在这里帮助我。
非常感谢!!!
答案 0 :(得分:2)
最后,问题解决了 发生这种情况是因为表格没有约束,因为我的一个粗心的错误:
form = Review_Form(sentences=sents)
而不是应该是:
form = Review_Form(request.POST, sentences=sents)
我回答这个问题是因为我觉得这对像我这样的其他新开发者来说可能很有用 如果您愿意,请在此处阅读有关未绑定和绑定表单的更多信息:Django form API