如何在Django 2.0的干净方法中覆盖实例/表单值?
类LocationForm(forms.ModelForm(:
def clean(self):
# do some work
if check_condition:
raise ValidationError
# pass validation checks
# overwrite new field value
instance.field = new_val
覆盖的字段应该被覆盖,并在新的模型实例中生效。
我想在clean方法中这样做的原因是这样我就可以在表单中引发验证错误
使用模型的保存方法是可行的,但引发验证错误不会在django模板中的表单上显示错误。
覆盖clean
方法,只更新cleaned_data
。
def clean(self):
self.cleaned_data = super().clean()
self.cleaned_data['field'] = value
return self.cleaned_data
您也可以在此处添加表单错误。如self.add_error('field', 'error message')
,它将为您引发ValidationError
并呈现带有错误的表单。