Я создал форму, в которой есть все необязательные поля для редактирования записи, и те поля, в которых есть данные, обновляются, а остальные остаются прежними. Для FloatFields
он интерпретирует 0
как пустую от данных.
В настоящее время я использую маршрут для решения этой проблемы:
if form.amount.raw_data[0] == '0':
new_amount = 0
else:
new_amount = form.amount.data if form.amount.data else previous_record.amount
Я чувствую себя более программистом c Решением будет создание пользовательского валидатора, который интерпретирует 0
как фактические данные. Я попробовал это здесь:
class OptionalZeroAllowed(object):
"""
Allows empty input and stops the validation chain from continuing.
If input is empty, also removes prior errors (such as processing errors)
from the field.
:param strip_whitespace:
If True (the default) also stop the validation chain on input which
consists of only whitespace.
Also interprets 0 as actual data.
"""
field_flags = ("optional",)
def __init__(self, strip_whitespace=True):
if strip_whitespace:
self.string_check = lambda s: s.strip()
else:
self.string_check = lambda s: s
def __call__(self, form, field):
if field.raw_data[0] == '0':
field.data = 0
elif (
not field.raw_data
or isinstance(field.raw_data[0], string_types)
and not self.string_check(field.raw_data[0])
):
field.errors[:] = []
raise StopValidation()
Не уверен, почему ручная установка form.data
на 0
не работает, но был бы признателен за помощь в понимании / поиске лучшего решения.
Спасибо !