我有一个限制小数位数的模型:
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,我允许有更多的小数位。我做错了什么?
请您参考如下方法:
有两个选项可以解决这个问题。
第一个是像这样重写你的模型init方法
def __init__(self, *args, **kwargs):
super(TestForm, self).__init__(*args, **kwargs)
self.fields['lat'].decimal_places = None
self.fields['lat'].max_digits = None
这将禁用模型形式的小数位和最大数字验证。那么您的 clean_lat 方法应该确保确保表单数据验证。模型仍将截断/舍入/验证十进制值。
第二个选项是从模型中删除 max_digits=8, decimal_places=5 并确保在表单 clean_lat 方法中进行验证。如果在不使用 ModelForm 的情况下保存对象,这可能会产生问题。
