我在Django管理模型中有一个IntegerField,有时人们键入“2,100”而不是“2100”,Django抱怨“输入整数”。是否有可能覆盖一些允许我去除逗号,美元符号等的方法,以便可以将数字正确地解析为整数,同时对用户直观?我已经尝试过clean()和clean_fields(),但它们似乎并不是我想要的,除非我错误地使用它们。谢谢!
答案 0 :(得分:2)
如果django的内置版本,如何编写自己的自定义整数字段并使用它。有关详细信息,请参阅docs。您可能希望覆盖内置的IntegerField
,然后可能write your own FormField。
我怀疑,当您在模型上覆盖ModelForm
和clean()
时,clean_fields()
上的验证失败了 - 表单验证将在模型验证之前启动。
尝试这样的事情:
from django.db import models
from django.forms import fields
class IntegerPriceFormField(fields.IntegerField):
def to_python(self, value):
if isinstance(value, basestring):
value = value.replace(",", "").replace("$", "")
return super(IntegerPriceFormField, self).to_python(value)
class IntegerPriceField(models.IntegerField):
def formfield(self, **kwargs):
defaults = {'form_class': IntegerPriceFormField}
defaults.update(kwargs)
return super(IntegerPriceField, self).formfield(**defaults)
然后,您可以在模型定义中使用IntegerPriceField而不是IntegerField。