gpt4 book ai didi

python - 带有动态字段的 Django 表单。无效但没有错误

转载 作者:行者123 更新时间:2023-12-01 05:04:58 25 4
gpt4 key购买 nike

我一直在使用 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

我真的不明白为什么表单无效,我已经被困在这里好几天了,到处都在谷歌搜索。希望有人可以在这里帮助我。

非常感谢!!!

最佳答案

问题终于解决了。
发生这种情况是因为表单未绑定(bind),这是由于我粗心的错误之一:

form = Review_Form(sentences=sents)

而不是它应该是的:

form = Review_Form(request.POST, sentences=sents)

我回答这个问题是因为我认为这可能对像我这样的其他新开发人员有用。
如果您愿意,可以从此处阅读有关未绑定(bind)和绑定(bind)表单的更多信息:Django form API

关于python - 带有动态字段的 Django 表单。无效但没有错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25224397/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com