我有一个烧瓶应用程序,用户可以提交一个房间在我的WTForms中有一个price字段是FloatField:

preis = FloatField('Preis p.P.', validators=[Optional()])

如果输入正确(带点),则工作正常,例如:
1.00

但如果使用逗号,则会触发错误,例如:
1,00

python - Python Flask WTForms FloatField允许1,0和1.0允许逗号和点-LMLPHP
我的想法是在main.py中捕捉到这一点,但问题是,来自wtforms的默认错误消息首先触发:
我试图将float转换成string,检查,是否在这个字符串中,并使用一个简单的replace(",",".")然后转换回float。
另一个问题是,如何将此默认Not a valid float value消息更改为自定义消息?
谢谢!

最佳答案

您可以将floatfield子类化,并将replace函数添加到其process_formdata()函数中。

class MyFloatField(FloatField):
    def process_formdata(self, valuelist):
        if valuelist:
            try:
                self.data = float(valuelist[0].replace(',', '.'))
            except ValueError:
                self.data = None
                raise ValueError(self.gettext('Not a valid float value'))

您也可以在这里更改错误消息。

10-08 12:33