【发布时间】:2016-04-07 13:31:56
【问题描述】:
我正在尝试在 Django 中创建一个百分比字段,用户只需填写 40 即可获得 40%。输入框右侧会有一个百分号,让他们知道应该填写一个百分比。 0.4 必须存储在数据库中。到目前为止,我已经尝试了以下方法:
class PercentageField(fields.FloatField):
widget = fields.TextInput(attrs={"class": "percentInput"})
def to_python(self, value):
val = super(PercentageField, self).to_python(value)
if is_number(val):
return val/100
return val
def prepare_value(self, value):
val = super(PercentageField, self).prepare_value(value)
if is_number(val):
return str((float(val)*100))
return val
def is_number(s):
if s is None:
return False
try:
float(s)
return True
except ValueError:
return False
它可以工作,但问题是,当我发布无效数据并再次呈现表单时,它会将 40 显示为 4000。换句话说,它将数字再次乘以 100,而不会除以它。
有什么建议可以解决吗?
我已经尝试过this 解决方案,但它会重复该值 100 次。改正后也有同样的问题。
我使用的是 Python3.5
【问题讨论】:
-
如果您将
40视为40%并将0.4视为0.4%,那么为什么要使用单独的字段?为什么不使用带有最小值和最大值验证器的简单 FloatField()? -
用户可以填写120,也可以填写120%。如果他们填1.2,我不知道是不是1.2%的120%
-
.. 那么,您希望用户能够为 120% 填充 120?
-
为什么不保存提交的值,然后在向用户显示时转换为浮动?
-
@ahmed:我确实考虑过这一点,但是这些数字是用于计算的,所以我不想记住每次在使用数字之前都要除以 100。对我来说,用 40 表示 40% 似乎更加用户友好,所以我觉得奇怪的是没有一个简单的解决方案可用。