将错误链接到WTForms字段列表中的右侧字段



我使用WTForm来验证我直接从javascript模型提交的表单(通过敲除填充)。在我的表格中,我有一个可以动态添加/删除的银行账户列表。在python方面,我有这样的东西:

class Account(Form):
    acc_name        = TextField('Account', [validators.Length(min=2, max=35)])    
class InformationForm(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.']}

如何将错误链接到正确的帐户?

EDIT:我最终的做法是在InformationForm类中添加了一个getErrors方法,该方法为每个Account构建一个字典,该字典由一个唯一的Id索引,其中的值是每个Account错误。然后,我将其作为json返回到我的应用程序。我保留这个问题,以防有"自然"的解决方案。。。

FieldList中的每个单独元素本身就是一个字段。如果FieldList包含TextField,则每个条目都是一个TextField。如果它包含FormField,那么它就是FormField(然后它包含一个有自己字段的表单)。FieldList条目可以通过迭代FieldList或访问FieldList的.entries属性来访问。

因此,与其查看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 %}

如果这是你需要持续经常做的事情,你可能想把它抽象成一个宏,而不是对每个专业字段设置都这样做。

最新更新