【发布时间】:2012-03-11 07:03:13
【问题描述】:
我的问题很简单,但我无法解决我的问题:每次在管理员中显示字段时,我都需要处理一个字段,因为它必须以不同的方式保存在数据库中。
例如,我需要用户在管理员中输入百分比(比如 50、70 或 100),但这些值将在数据库中保存为 0.5、0.7 或 1。之后,当用户想要编辑或者只是查看这些值,即使它们在数据库中保存为浮点数,也不必对它们进行预处理以再次将它们显示为百分比(整数)。
我的想法是这样的:
def valid_percentage(value):
if not 0 <= value <= 1:
raise ValidationError(u'Must be a value between 0 and 100')
class PercentageField(models.IntegerField):
def __init__(self, *args, **kwargs):
kwargs['validators'] = kwargs.get('validators', []) + [valid_percentage]
super(PercentageField, self).__init__(*args, **kwargs)
def to_python(self, value):
return None if value is None else int(100 * value)
def get_prep_value(self, value):
return None if value is None else value/100.0
会做的。但这是保存和显示数据都错了。
【问题讨论】:
-
你可能不应该继承
IntegerField,因为你不会在数据库中存储整数。请改用DecimalField或FloatField。
标签: database django django-admin