在任何类型的Django Field上,都可以使用validators
,我可以勾挂自己的自定义验证器.我知道我无法更改验证器中的值,它必须返回None
或django.core.exceptions.ValidationError
.
我想做的是在保存该字段之前更改该字段本身的值.例如,我想将ISO 3166数字代码存储为列:
def digit_only(value):
if not value.isdigit():
raise ValidationError(
_("%(value)s contains a non-digit"),
params={"value": value},
)
class Country(models.Model):
# ...
iso3166_numeric = models.CharField(max_length=3, validators=[digit_only])
# ...
目前为止一切顺利现在,如果输入的值是"1",我想在将该值存储在表中之前将其转换为"001".无需创建新的Field类型然后编写自定义Field.to_python()
,我是否可以像使用验证器一样实现同样的功能?
我仍在学习,而且还没有达到Form的水平,但当通过Djano命令从CSV进行种子 seeder 时,我正在try 实现上述目标.是的,我可以在从CSV读取时立即修改该值,但我正在try 找出是否有一个地方可以这样做,这样我就不必为表单单独编写它.