我的表单看起来像这样:
<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-0
和person-1
而不是people
,这是我不想要的。我不能使用SelectMultipleField,因为这似乎需要一个选择列表,我不知道选择列表(它是由第三方动态提供给我的。)
我只是使用表单来验证生成的HTML帖子数据,而不是渲染HTML,所以不用担心。
我将发布我所做的答案,即使用自定义字段。但我想知道是否有一些方法可以使用内置字段在wtforms中执行此操作。
由于
答案 0 :(得分: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')
现在可以使用,但我不确定是否有办法使用内置字段和验证器来执行此操作。