私はカスタムフロートフィールド(MyFloatField)を使用する複数のフォームを用意しています。Python Flask WTFormsカスタムFloatFieldは1つのフォームクラスでのみ機能します
,
を置き換えることができるようにカスタムフロートフィールドを作成しました。ユーザーが,
- 20,00のフロートを入力すると、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'))
:
は、ここに私のカスタムFloatFieldです。
class ZimmerForm(Form):
preis = MyFloatField('Preis pro Person', validators=[Optional()])
preis_doppelzimmer = MyFloatField('Preis pro Person', validators=[Optional()])
preis_mehrbettzimmer = MyFloatField('Preis pro Person', validators=[Optional()])
preis_wohunung = MyFloatField('Preis pro Person', validators=[Optional()])
私は同じ動作が必要ないくつかの他の形式もありますが、動作しないようです。私は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'}]
は、私の知る限り
,
とフロートを理解するように交換されていません。ここで
は私の他の形態である:
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")])
EDIT
これらのフォームの唯一の違いは、それが動作する最初のものが値を持たない、ということです。ユーザーが値を入力します。
編集がうまくいかないフォームは編集用です。それはすでに値があることを意味します。
あなたのコードはprocess_formdata関数に入っていますか? – Hannu
はいそれは正しい値を印刷することさえ入力します – Roman