2013-01-21 63 views
5

我有一个wtforms形式如何禁用wtforms SelectField选项验证?

class MyForm(Form): 
    names = SelectField('name', choices=[]) 

动态建成并通过一个Ajax调用模板渲染的名称字段的选择。当我提交表格时,它提出了一个例外“不是一个有效的选择”。我不希望表单为我验证名称字段的选择。我如何禁用验证?

+0

为什么你添加一个选择参数呢?为什么不'name = SelectField('name')'? –

回答

1

通过“我不想让表单验证选项”,我假设你实际上是的意思是“我将在稍后自己做,并且怀疑表单能够正确地做到这一点”。

但是你很幸运!您可以继承现有表单以动态添加选择。

class MyForm(Form): 
    # other fields... 


def some_handler(request): 
    name_choices = build_name_choices() 
    class RealForm(MyForm): 
     names = SelectField('name', choices=name_choices) 

    form = RealForm(request.GET) 
    form.validate() 

这也节省了您在使用这些以后你自己生成合并形式的验证和错误消息的单调乏味。

+2

你刚刚用自己的问题替换了作者的问题并回答了它。我也有这个需要,这仍然是错误的假设。我的需求是在客户端上动态添加开放选项,这在服务器上是未知的。 – Xealot

8

我做了这样的事情来绕过WTForms中的SelectMultipleField验证。它应该以同样的方式与普通SelectField

class NonValidatingSelectMultipleField(SelectMultipleField): 
    """ 
    Attempt to make an open ended select multiple field that can accept dynamic 
    choices added by the browser. 
    """ 
    def pre_validate(self, form): 
     pass 

我只是覆盖内置的验证。

+0

这是完全正确的。如果有人有兴趣,这里是你跳过的pre_validate代码: –

+0

这是正常的SelectField。这里是SelectMultipleFIeld:def pre_validate(self,form): if self.data: values = list(c [0] for self.choices) for d in self.data: if d not in values: raise ValueError(self.gettext(“'%(value)s'不是该字段的有效选择”)%dict(value = d)) –