如何自定义整数字段的Django管理验证?

时间:2013-03-08 22:05:09

标签: django django-admin

我在Django管理模型中有一个IntegerField,有时人们键入“2,100”而不是“2100”,Django抱怨“输入整数”。是否有可能覆盖一些允许我去除逗号,美元符号等的方法,以便可以将数字正确地解析为整数,同时对用户直观?我已经尝试过clean()和clean_fields(),但它们似乎并不是我想要的,除非我错误地使用它们。谢谢!

1 个答案:

答案 0 :(得分:2)

如果django的内置版本,如何编写自己的自定义整数字段并使用它。有关详细信息,请参阅docs。您可能希望覆盖内置的IntegerField,然后可能write your own FormField

我怀疑,当您在模型上覆盖ModelFormclean()时,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。