WTForms не проверяет - нет ошибок - PullRequest
6 голосов
/ 26 декабря 2010

У меня странная проблема с библиотекой WTForms.Для тестов я создал форму с одним полем:

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

В качестве содержимого она получает простую строку, и теперь я использую form.validate() и по любой причине возвращает False.

Я изучил validate() методы объекта 'Form и Field.Я обнаружил, что поле возвращает true, если длина списка ошибок равна нулю.Это верно для моего теста, так как я не получаю никаких ошибок.В оболочке проверка моего поля возвращает True, как и ожидалось.

Метод validate() в объекте Form просто запускается над полями и вызывает их метод validate() и возвращает false только в том случае, если одно из полей имеет значениеподтверждено как ложное.

Так как мое Поле проверено без ошибок, я не вижу никакой причины в коде, почему form.validate() возвращает False.

Любые идеи?

Ответы [ 2 ]

7 голосов
/ 23 января 2011

Мне кажется, вы просто передаете неправильные значения в вашу форму. Это то, что вам нужно использовать такую ​​форму:

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.

0 голосов
/ 02 марта 2012

Что вы передаете конструктору формы?Вы не предоставили никакого контекста о том, как используется форма.

Первым аргументом формы должна быть оболочка ввода данных формы.Допустимые включают, но не ограничиваются:

  • Джанго (request.POST или request.GET)
  • Werkzeug (request.form или request.args)
  • WebOb (зависит; включает в себя Pylon / Pyramid, TurboGears и каркас приложения google appengine)
  • 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
...