web-dev-qa-db-ja.com

Flask-WTFを使用して不要なDateFieldを実装する方法

オプションのDateFieldが必要ですが、空のままにすると「有効な日付値ではありません」エラーが発生します

Wtformsのソースコードにいくつかのログを追加し、formdata.getlist(self.name)がこのDateFieldの[u '']を返すことがわかりました

私のフォームのコード:

from wtforms import BooleanField, TextField, TextAreaField, PasswordField, validators, HiddenField, DateField, SelectField
from flask_wtf import Form

class EmployeeForm(Form):
    id = HiddenField('id')
    title = TextField('Title')
    start = DateField('Start Date', format='%m/%d/%Y')
21
peon

Optional バリデーターを探しています。

start = DateField('Start Date', format='%m/%d/%Y', validators=(validators.Optional(),))
33
dirn

かなり古いトピックですが、誰かが同じ問題に遭遇する可能性があるので、私はそれについて可能な限りの答えを出します。 validators.Optional()を追加しても、フィールドは処理段階の早い段階でエラーとしてマークされるため、ここでは役に立ちません。
次のようにプロセッサの動作にパッチを適用できます:

class NullableDateField(DateField):
    """Native WTForms DateField throws error for empty dates.
    Let's fix this so that we could have DateField nullable."""
    def process_formdata(self, valuelist):
        if valuelist:
            date_str = ' '.join(valuelist).strip()
            if date_str == '':
                self.data = None
                return
            try:
                self.data = datetime.datetime.strptime(date_str, self.format).date()
            except ValueError:
                self.data = None
                raise ValueError(self.gettext('Not a valid date value'))
0
brevno