我正在使用WTForms来显示和验证表单输入。我使用DecimalField
作为金额输入,当插入带点作为小数分隔符的值时,它可以正常工作。由于此网站将在欧洲大陆使用,我还希望允许逗号作为小数分隔符。这意味着 “2.5”和“2,5”都应该产生一个意思是“两个半”的值。
当我用逗号输入值时,我收到错误'Not a valid decimal value'
。如何使用WTForms接受点和逗号作为小数分隔符?
我知道我可以使用Babel来使用基于区域设置的数字格式,但我不希望这样。我特别想接受点和逗号作为分隔符值。
答案 0 :(得分:6)
您可以继承DecimalField
并在处理数据之前用逗号替换逗号:
class FlexibleDecimalField(fields.DecimalField):
def process_formdata(self, valuelist):
if valuelist:
valuelist[0] = valuelist[0].replace(",", ".")
return super(FlexibleDecimalField, self).process_formdata(valuelist)
答案 1 :(得分:0)
class FlexibleDecimalField(forms.DecimalField):
def to_python(self, value):
# check decimal symbol
comma_index = 0
dot_index = 0
try:
comma_index = value.index(',')
except ValueError:
pass
try:
dot_index = value.index('.')
except ValueError:
pass
if value:
if comma_index > dot_index:
value = value.replace('.', '').replace(',', '.')
return super(FlexibleDecimalField, self).to_python(value)
class FooForm(forms.ModelForm):
discount_value = FlexibleDecimalField(decimal_places=2, max_digits=8)
class Meta:
model = Foo
fields = ('discount_value',)