Вот определение DateField
из источника :
class DateField(DateTimeField):
"""
Same as DateTimeField, except stores a `datetime.date`.
"""
def __init__(self, label=None, validators=None, format="%Y-%m-%d", **kwargs):
super(DateField, self).__init__(label, validators, format, **kwargs)
def process_formdata(self, valuelist):
if valuelist:
date_str = " ".join(valuelist)
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"))
Там вы можете увидеть, как ValueError
поднимается из метода process_formdata()
, который непозволяют вам указать конкретное сообщение об ошибке. Однако обратите внимание, что сообщение об ошибке заключено в вызове self.gettext()
- это позволяет переводить сообщения, и доступен перевод CZ.
Объект перевода передается в поля формы изForm
объект, так что вы можете установить перевод для каждого экземпляра или для всех форм, использующих наследование классов.
Перевод для каждой формы :
from wtforms import DateField, Form
from werkzeug.datastructures import MultiDict
class MyForm(Form):
user_birth = DateField('Datum narození', format='%d-%m-%y')
if __name__ == "__main__":
# this fakes an invalid form from webserver
request_form = MultiDict([("user_birth", "invalid date")])
form = MyForm(request_form, meta={'locales': ['cs_CZ']})
print(form.user_birth.process_errors) # ['Neplatná hodnota pro datum.']
Перевод с общим базовым классом:
class BaseForm(Form):
class Meta:
locales = ['cs_CZ']
class MyForm(BaseForm):
user_birth = DateField('Datum narození', format='%d-%m-%y')
if __name__ == "__main__":
request_form = MultiDict([("user_birth", "invalid date")])
form = MyForm(request_form)
print(form.user_birth.process_errors) # ['Neplatná hodnota pro datum.']
Все поддерживаемые локали можно найти здесь и сопроводительную документацию здесь .