7

我对 WTForms 库有一个奇怪的问题。对于测试,我创建了一个带有单个字段的表单:

class ArticleForm(Form):
    content = TextField('Content')

它接收一个简单的字符串作为内容,现在我使用它并出于任何原因form.validate()返回。False

我研究了and对象的validate()方法。我发现如果错误列表的长度为零,则该字段返回 true。这对我的测试来说是正确的,因为我没有收到任何错误。在 shell 中,我的字段的验证按预期返回 True。'FormField

validate()Form 对象中的方法只是在字段上运行并调用它们的validate()方法,并且仅在其中一个字段被验证为 false 时才返回 false。

因此,当我的字段经过验证没有任何错误时,我在代码中看不到任何form.validate()返回的原因False

有任何想法吗?

4

2 回答 2

7

在我看来,您只是将错误的值传递给您的表单。这是您使用这种形式所需要的:

from wtforms import Form, TextField # This is wtforms 0.6

class DummyPostData(dict):
    """
    The form wants the getlist method - no problem.
    """
    def getlist(self, key):
        v = self[key]
        if not isinstance(v, (list, tuple)):
            v = [v]
        return v

class ArticleForm(Form):
    content = TextField('Content')

form = ArticleForm(DummyPostData({'content' : 'my content' }))
print form.validate()
#$ python ./wtf.py 
#True

ps:如果您提供更明确的信息会更好:代码示例和WTForms版本。

于 2011-01-23T10:56:37.323 回答
0

你将什么传递给表单的构造函数?您没有提供有关如何使用表单的任何上下文。

表单的第一个参数必须是表单数据输入包装器。有效的包括但不限于:

  • 姜戈(request.POSTrequest.GET
  • Werkzeug (request.formrequest.args)
  • WebOb(取决于;包括 Pylon/Pyramid、TurboGears 和 google appengine webapp 框架)
  • cgi.FieldStorage 或等效的

在类似 django 的视图中使用如下所示:

def view(request, article_id):
    article = Article.objects.get(article_id)
    form = ArticleForm(request.POST, obj=article)
    if request.POST and form.validate():
        # do something
    # render stuff, etc
于 2012-03-01T20:05:27.687 回答