1

我是 WTForms 的新手。我想创建一种名为 DollarField 的新型字段,它允许“$”和逗号。然后我会去掉这些并保存价值。

我这样做去除了“$”并删除了逗号,但现在所有适用于 DecimalField 的正常验证(例如,如果用户输入“asda”,则捕获案例)不起作用。

class DollarField(DecimalField):
    def process_formdata(self, valuelist):
        if len(valuelist) == 1:
            self.data = [valuelist[0].strip('$').replace(',', '')]
        else:
            self.data = []
4

1 回答 1

1

您的问题是,因为您覆盖process_formdata,您正在用您自己的代码替换默认处理代码(它试图将字符串转换为小数,因此如果不能,则会引发错误)。您需要确保process_formdata手动调用父process_formdata方法的实现,以便其逻辑也运行,就像这样......

class DollarField(DecimalField):
    def process_formdata(self, valuelist):
        if len(valuelist) == 1:
            self.data = [valuelist[0].strip('$').replace(',', '')]
        else:
            self.data = []

        # Calls "process_formdata" on the parent types of "DollarField",
        # which includes "DecimalField"
        super(DollarField).process_formdata(self.data)
于 2014-01-02T12:10:10.300 回答