You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 15:39:03