Django注册表单已配置username字段但提交后未存储问题求助
问题根因
你在SignUpForm类中重写的clean_username()字段清洗方法没有返回清洗后的username值,导致Django表单处理流程中,cleaned_data字典内的username字段会被自动移除,最终保存用户实例时该字段为空。
修复方案
修改forms.py文件中SignUpForm类的clean_username方法,在校验通过后返回清洗得到的username值即可:
def clean_username(self): data = self.cleaned_data['username'] if TbUser.objects.filter(username=data).exists(): raise forms.ValidationError( "Username already exists. Pick another one") # 新增以下行返回清洗后的字段值 return data
补充说明
- Django中所有
clean_<字段名>格式的单字段清洗方法,必须返回对应字段的清洗后值,否则该字段会从cleaned_data中被删除 - 当前你在子类
SignUpForm中重写了父类CustomUserCreationForm的clean_username方法,父类的校验逻辑已经被覆盖,如果你需要保留父类逻辑可以调用super().clean_username(),当前你自行实现的重名校验已经覆盖了父类功能,无特殊需求可以不用额外添加 - 你在
clean()方法中实现的两次密码一致性校验是UserCreationForm的内置逻辑,属于冗余代码,可以直接删除,不会影响原有功能
内容的提问来源于stack exchange,提问作者kakakakakakakk
相关产品推荐
相关产品推荐

