0

我有一个看起来像这样的表格:

<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"and 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 因为这似乎需要一个选择列表,而我不知道选择列表(它是由第 3 方动态提供给我的)。

我只使用表单来验证生成的 HTML 发布数据,而不是渲染 HTML,所以不用担心。

我将发布我所做的作为答案,即使用自定义字段。但我想知道是否有某种方法可以使用内置字段在 wtforms 中执行此操作。

谢谢

4

1 回答 1

1

Here is what I have so far ended up doing:

I create my own field called "ListField"...

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

Then I can use it like the following:

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')

This works for now, but I'm not sure if there is a way to do this with the built-in fields and validators.

于 2013-05-16T19:02:55.507 回答