2012-07-19 19 views
4

我正在使用WTForm驗證直接從javascript模型(通過敲除填充)提交的表單。在我的表格中,我有一個可以動態添加/刪除的銀行賬戶列表。在Python端我有這樣的事情:將錯誤鏈接到WTForms FieldLists中的右側字段

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.']} 

我該如何將錯誤鏈接到正確的帳戶?

編輯:我做到了,到底該方式是我添加了一個getErrors方法我InformationForm類,它通過建立每個戶口所在值是每個帳戶的錯誤一個唯一的ID索引的dictionnary。然後我將它作爲json返回給我的應用程序。如果存在「自然」解決方案,我保持開放性...

+1

你能提供一個鏈接到你的'getErrors'實現嗎?我不相信在WTForms中有這樣的方法。我希望它會返回一個錯誤列表,如'[None,[「第二個元素的第一個錯誤」,「第二個元素的第二個錯誤」],None]'。 – 2014-01-28 19:21:04

+1

我爲此打開了一個[GitHub問題](https://github.com/wtforms/wtforms/issues/49)。 – 2014-01-28 19:25:45

回答

2

FieldList中的每個單獨元素都是一個字段本身。如果FieldList包含一個TextField,則每個條目都是一個TextField。如果它包含一個FormField,那麼它是一個FormField(然後包含一個帶有自己的字段的表單)。FieldList條目可以通過迭代FieldList或訪問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,而不是做這行各專業領域設置,如果這是您需要持續和經常做一些事情。