我有一个限制小数位数的模型:
lat = models.DecimalField(max_digits=8, decimal_places=5, null=True, blank=True)
从中我创建了一个ModalForm
但是如果他们提交了超过5个位置的内容,我想限制小数位数。所以我做了一个自定义的清理方法:
def clean_lat(self):
lat = self.cleaned_data['lat']
return round(lat, 4)
但它仍然会引发ValidationError
,我有更多小数位,然后允许。我做错了什么?
答案 0 :(得分:2)
有两种方法可以解决这个问题。
首先要覆盖你的模型init
方法
def __init__(self, *args, **kwargs):
super(TestForm, self).__init__(*args, **kwargs)
self.fields['lat'].decimal_places = None
self.fields['lat'].max_digits = None
这将禁用modelform的小数位和最大数字验证。然后,您的clean_lat
方法应确保确保表单数据验证。模型仍然会截断/舍入/验证小数值。
第二个选项是从模型中删除max_digits=8, decimal_places=5
并确保在表单clean_lat
方法中进行验证。如果在不使用ModelForm
的情况下保存对象,则会产生问题。
答案 1 :(得分:-4)
form.is_valid方法做了一件非常简单的事情:
use strict;
use File::Find;
find({ wanted => \&processFile,}, '.');
sub processFile{
print $File::Find::name, "\n";
}
我建议你进入源代码(django / forms / forms.py),原因很快就会找到。