unboundfield对象不可调用



出现错误。我尝试将布尔字段和整数字段交替使用,但出现此错误。

{% block content %}
File "C:UsersKilluDesktopEGE passtemplatesadd_result.html", line 19, in block 'content'
{{ form.checkboxes_fields[i + 1]() }}
TypeError: 'UnboundField' object is not callable
<div>
<form method="POST">
{{ form.csrf_token }}
<fieldset>
<legend>{{subject.capitalize()}}</legend>
<div class="grid">
{% for i, task in enumerate(tasks)%}
{% if task == 1 %}
<div>
<label for="checkbox{{i + 1}}">№{{i + 1}}</label>
{{ form.checkboxes_fields[i + 1]() }}
</div>
{% else %}
<div>
<label for="number{{i + 1}}">№{{i + 1}}</label>
{{ for number in form.checkboxes_fields }}
</div>
{% endif %}
{% endfor %}
</div>
{{ form.submit(class="btn btn-primary") }}
</fieldset>
</form>
</div>
class AdditionResultsForm(FlaskForm):
checkboxes_fields = [BooleanField(f"{i}") for i in range(40)]
numb_fields = [IntegerField(f"{i}", default=0) for i in range(50)]
submit = SubmitField('Отправить результат')

我真的不知道为什么会这样,我试着在测试项目中这样做,在测试项目中它的工作

我也有同样的错误。问题在于简单列表不支持Flask-WTF的字段,因此您应该使用FieldList参数min_entries:

class AdditionResultsForm(FlaskForm):
# checkboxes_fields = BooleanField(f"{i}") for i in range(40)]
numb_fields = FieldList(IntegerField(f"{i}", default=0), min_entries=50)
submit = SubmitField('Отправить результат')

但是,根据Flask-WTF文档,您不能将它用于BooleanField:

注意:由于HTML发送值的限制,FieldList不能包含BooleanField或SubmitField实例。

你可以尝试动态创建表单类,但不确定它会工作:

class AdditionResultsFormBase(FlaskForm):
submit = SubmitField('Отправить результат')
def checkboxes_fields(filenames):
class AdditionResultsForm(AdditionResultsFormBase):
pass
for i in range(40):
setattr(AdditionResultsForm, BooleanField(f"{i}"))
return AdditionResultsForm()

最新更新