我在一种情况下使用 django.db.models.fields.DecimalField,但它的验证错误非常糟糕。
就像,当用户输入 3,4 而不是 3.4 时,它会说 - '输入一个数字'。在某些国家,3,4 和 3.4 一样多。至少对于那些可能不精通计算机的人来说。
因此,出于这个原因,我试图覆盖此字段验证,以便我可以自己验证它。
我的问题是 - 在调用 modelforms clean_my_field() 之前,模型自己的验证工作并且它已经引发了错误。
所以我查找了https://docs.djangoproject.com/en/dev/ref/models/instances/#validating-objects
读完后我明白我可以做到
def full_clean(self):
super(MyModel, self).full_clean(exclude = 'my_field')
并且 my_field 将被排除在验证之外,我可以自己验证它
def clean(self)
pass
#how do i access cleaned data here anyway?
#self.cleaned_data does not exist
#is self.my_field the only way?
但唉 - 它不起作用。self.my_field 值是 clean() 方法中的旧值,clean_data 无处可寻。
这一切让我觉得我的做法是错误的。我想我可以编写自己的字段来扩展 django 的 DecimalField。我认为这种方法会起作用......有人可以为我解决这个问题 - 为什么它不起作用。如果它不起作用,为什么会在那里排除?顺便说一句,Django 版本 1.4.2。
艾伦
编辑:我挖得更深。似乎即使我覆盖了所有模型清理方法并且根本不在它们中使用超级 - 字段仍然在某个时候被清理并且到那时已经引发了错误。
我想我会在这种情况下对 django.db.models.fields.DecimalField 做一些扩展。
关于为什么在 full_clean 方法中存在排除的答案仍然很好。如果它不起作用,为什么它在那里?