Django两个近似Form表单自定义校验一个生效一个失效原因咨询
问题排查结果
核心原因
Django 表单的单字段自定义校验逻辑遵循固定命名约定:校验方法必须命名为 clean_<对应字段名>,框架在执行is_valid()校验时会自动扫描调用符合规则的方法。
SignUpForm1的字段名为test_value,对应校验方法clean_test_value符合命名规则,因此校验正常触发SignUpForm2的字段名为name,但校验方法被错误命名为clean_name_value,不符合约定,框架无法识别该方法为name字段的校验逻辑,因此不会执行,导致校验规则不生效
修复方法
只需修改SignUpForm2的校验方法名,使其符合命名规则即可,修改后代码如下:
class SignUpForm2(forms.Form): name = forms.CharField( label='name', max_length=100, widget=forms.TextInput(attrs={'class': "input"}) ) def clean_name(self): data = self.cleaned_data.get('name') print(data) if data != "abc": raise forms.ValidationError("Error") return data
内容的提问来源于stack exchange,提问作者jakub_zoitech
相关产品推荐
相关产品推荐

