2013-05-16 46 views
0

我有一個看起來是這樣一種形式:驗證未知組項目與WTForms

<form method="post"> 
    <input id="1" name="people" type="checkbox" value="1"/> 
    <label for="1">Paul</label> 

    <input id="2" name="people" type="checkbox" value="2"/> 
    <label for="2">Elizabeth</label> 

    <input type="submit"/> 
</form> 

當提交這種形式,我想驗證用戶已檢查至少一人。請注意,我不想使用name"person-0"name="person-1",我實際上想使用name="people"作爲我的對象的名稱。

我將創建一個使用這樣的事情我......形式

class MyForm(Form): 
    some_field = fields.TextField(u'Some Field', [validators.required()]) 
    some_option = fields.BooleanField(u'Some Option') 
    people = # What to put here? 

所以,我可以使用什麼類型的字段的「人」字段?

我不認爲我可以使用FieldList,因爲那將期望名稱是person-0person-1而不是people,這是我不想要的。我不能使用SelectMultipleField,因爲它似乎期望一個選項列表,我不知道選擇列表(它是由第三方動態給我的)。

我只使用表單來驗證生成的HTML發佈數據,而不是渲染HTML,所以不用擔心。

我打算髮布我做的答案,即使用自定義字段。但我想知道是否有某種方法可以使用內置字段在wtforms中執行此操作。

感謝

回答

1

這是我迄今落得這樣做:

創建我自己的領域被稱爲「ListField」 ......

class ListField(Field): 
    def process_formdata(self, valuelist): 
     self.data = valuelist 

然後我就可以使用它像以下內容:

class MyForm(Form): 
    some_field = fields.TextField(u'Some Field', [validators.required()]) 
    some_option = fields.BooleanField(u'Some Option') 
    people = ListField() 

    def validate_people(self, field): 
     if len(field.data) == 0: 
      raise ValidationError('Must select at least one person') 

這是現在的作品,但我不知道是否有辦法做到這一點與t他內置了字段和驗證器。