7

WTFormsライブラリで奇妙な問題が発生しました。テストでは、単一のフィールドを持つフォームを作成しました。

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

単純な文字列をコンテンツとして受け取り、今使用しているのですが、なんらかの理由form.validate()で返されます。False

andオブジェクトのvalidate()メソッドを調べました。エラーリストの長さがゼロの場合、フィールドはtrueを返すことがわかりました。エラーが発生しないため、これは私のテストにも当てはまります。シェルでは、フィールドの検証により、期待どおりにTrueが返されます。'FormField

Formオブジェクトのvalidate()methodeは、フィールド上で実行され、それらのvalidate()メソッドを呼び出し、フィールドの1つが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.POSTまたはrequest.GET)
  • Werkzeug (request.formまたはrequest.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 に答える