最新要闻

广告

手机

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

家电

天天热推荐:[django]钩子函数的一些细节(clean)

来源:博客园


(资料图片仅供参考)

函数名

说明clean_后面跟着的是需要校验字段名称示例

class RelUserReset(forms.ModelForm):  def clean_confirm_password(self):    pass

校验顺序

说明:如果是继承的是Form对象,校验顺序就是字段在表单中的定义顺序。如果是继承的是ModelForm对象,校验顺序就是class Metafileds列表的顺序。

关于clean_data

说明:clean_data 里面装的是已经经过验证的字段。clean_data是一个字典。错误示例

class RelUserReset(forms.ModelForm):    class Meta:        model = UserInfo        fields = ["password","confirm_password"]    #定义钩子函数    def clean_password(self):        psw = self.cleaned_data.get("password")        #报错点        confirm = self.cleaned_data.get("confirm_password")        if confirm != psw:            raise ValidationError("密码不一致")        return confirm

这里的代码块有点多,请耐心阅读先关注函数名clean_password,由于表单验证是有顺序的,并且在fields列表里面confirm_passwordpassword之后,所以此时的confirm_password是没有经过校验的,也就是说cleaned_data里面还没有存在confirm_password的值,所以所有会出现报错。

解决方法:把钩子的函数名改成clean_confirm_password

关键词: 也就是说 已经经过