我正在使用WTForm来验证我直接从javascript模型提交的表单(通过敲除填充).在我的表单中,我有一个可以动态添加/删除的银行帐户列表.在python方面我有这样的事情:
class Account(Form):
acc_name = TextField('Account', [validators.Length(min=2, max=35)])
class @R_685_4045@ionForm(Form):
account_list = FieldList(FormField(Account))
收到的用于验证的json数据如下:
'account_list': [{'acc_name': 'aaaaa'}, {'acc_name': 'b'}]}
问题是当我验证我收到这样的东西时,无法知道列表中的哪个帐户是错误的来源:
'account_list': [{'acc_name': [u'Field must be between 2 and 35 characters long.']}
编辑:我最终这样做的方式是我在我的@R_685_4045@ionForm类中添加了一个getErrors方法,该类为每个帐户构建一个由唯一ID索引的字典,其中值是每个帐户错误.然后我把它作为json返回给我的应用程序.如果有“自然”的解决方案,我会保持问题的开放性……
解决方法:
FieldList中的每个单独元素本身就是一个字段.如果FieldList包含TextField,则每个条目都是TextField.如果它包含FormField,则它是FormField(然后包含具有自己字段的表单)可以通过迭代FieldList或访问FieldList的.entries属性来访问FieldList条目.
因此,不要查看form.account_list.errors,而是查看封闭字段的错误.
所以为了你的用途,这样的事情:
{% for subfield in form.account_list %}
<!-- subfield in this case is an instance of FormField -->
{{ subfield.form.acc_name() %}
{% if subfield.errors %}
{% for error in subfield.form.acc_name.errors %}
<p class="error">{{ error }}</p>
{% endfor %}
{% endif %}
{% endfor %}
您可能希望abstract this out to a macro而不是为每个专业领域设置执行此操作,如果这是您需要始终如一地执行的操作.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。