Python Flask WTForms自定义FloatField仅适用于一个窗体类

2024-10-06 07:18:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我有多个表单使用我的自定义FloatField(MyFloatField)。在

我创建了一个自定义的FloatField,这样我就可以替换,,如果用户用,输入一个float-20,00将变成20.00。在

这是我的自定义浮动字段:

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('Kein valider Wert'))

我有一个工作正常的表格。在

^{pr2}$

我也有一些其他的形式,我需要同样的行为,但它似乎不起作用。我得到一个DataError

DataError: (psycopg2.DataError) FEHLER:  ungültige Eingabesyntax für Typ double precision: â12,90â
LINE 1: ...zimmer SET anzahl_zimmer='2', personen='2', preis='12,90' WH...
                                                             ^
 [SQL: 'UPDATE einzelzimmer SET anzahl_zimmer=%(anzahl_zimmer)s, personen=%(personen)s, preis=%(preis)s WHERE einzelzimmer.id = %(einzelzimmer_id)s'] [parameters: {'einzelzimmer_id': 50, 'anzahl_zimmer': u'2', 'personen': u'2', 'preis': u'12,90'}]

{1>因为float不是用cd1}代替的。在

以下是我的其他表格:

class EditZimmerForm_Einzel(Form):
    preis = MyFloatField('Preis pro Person', validators=[DataRequired(message="Geben Sie an wie teuer eine Nacht pro Person ist")])

class EditZimmerForm_Doppel(Form):
    preis_doppelz = MyFloatField('Preis pro Person', validators=[DataRequired(message="Geben Sie an wie teuer eine Nacht pro Person ist")])

class EditZimmerForm_Mehrbett(Form):
    preis_mehrbettz = MyFloatField('Preis pro Person', validators=[DataRequired(message="Geben Sie an wie teuer eine Nacht pro Person ist")])

class EditZimmerForm_Wohnung(Form):
    preis_wohnungz = MyFloatField('Preis pro Person', validators=[DataRequired(message="Geben Sie an wie teuer eine Nacht pro Person ist")])

编辑

这些形式之间的唯一区别是,第一种形式没有价值。用户输入一个值。在

不起作用的表单用于编辑。这意味着已经有了一个值。在


Tags: selfformproclasspersonvalidatorsdatarequiredpreis
1条回答
网友
1楼 · 发布于 2024-10-06 07:18:37

类MyFloatField仍然是FloatField。包含逗号的字符串不是有效的浮点,因此会导致错误。在

我建议您使用普通的StringField,并使用自定义验证器来确保输入满足您的要求。类似于forms.py中的内容:

def currency(form, field):
    try:
        Decimal(field.data)
    except:
        raise StopValidation('Value must be in decimal format')
    if Decimal(field.data) < 0:
        raise StopValidation('Value must be greater than zero')

class ZimmerForm(Form):
    preis = StringField('Preis pro Person', [currency, Optional()])

相关问题 更多 >