我遇到了WTForms库的一个奇怪问题。对于测试,我创建了一个包含单个字段的表单:
class ArticleForm(Form):
content = TextField('Content')
它会收到一个简单的字符串作为内容,现在我使用form.validate()
并因任何原因返回False
。
我查看了validate()
和'Form
对象的Field
方法。我发现如果错误列表的长度为零,则该字段返回true。这对我的测试来说是正确的,因为我没有得到任何错误。在shell中,我的字段的验证按预期返回True。
Form对象中的validate()
方法只是在字段上运行并调用它们的validate()
方法,只有在其中一个字段被验证为false时才返回false。
因为我的字段经过验证而没有任何错误,我在代码中看不到任何原因导致form.validate()
返回False
。
有什么想法吗?
答案 0 :(得分: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版本。
答案 1 :(得分:0)
你传递给表单的构造函数是什么?您没有提供有关如何使用表单的任何上下文。
表单的第一个参数必须是表单数据输入包装器。有效的包括但不限于:
request.POST
或request.GET
)request.form
或request.args
)在类似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