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

如何修复Django中UnboundLocalError: username变量引用前未赋值错误?

错误原因及修复方案

错误根源

出现UnboundLocalError是因为两个核心逻辑问题:

  1. 变量作用域错误:username、first_name等变量仅在form.is_valid()为True的分支内定义,但创建用户的代码写在该分支外面。当POST请求但表单验证失败时,这些变量未被赋值就被引用,直接触发错误。
  2. GET请求未处理:GET请求时,代码直接用request.POST初始化表单,还会尝试执行创建用户的逻辑,完全不符合表单页面的正常流程(GET请求应该展示空表单)。

修复后的代码

@login_required
def createPatient(request):
    # 区分POST/GET请求处理表单
    if request.method == "POST":
        form = PatientForm(request.POST, request.FILES)
        # 仅在表单验证通过时执行创建逻辑
        if form.is_valid():
            first_name = form.cleaned_data['first_name']
            last_name = form.cleaned_data['last_name']
            username = form.cleaned_data['username']
            email = form.cleaned_data['email']
            password = form.cleaned_data['password']
            address = form.cleaned_data['address']
            phone_number = form.cleaned_data['phone_number']
            dob = form.cleaned_data['dob']
            gender = form.cleaned_data['gender']
            
            user = CustomUser.objects.create_user(
                username=username, 
                email=email,
                password=password, 
                first_name=first_name, 
                last_name=last_name,
                user_type=5
            )
            # 更新患者关联字段并保存
            user.patients.address = address
            user.patients.phone_number = phone_number
            user.patients.dob = dob
            user.patients.gender = gender
            user.patients.save()
            
            # 可选:创建成功后重定向到患者列表页
            # return redirect('patient_list')
    else:
        # GET请求展示空表单
        form = PatientForm()
    
    # 返回表单页面(空表单或验证失败的表单)
    return render(request, 'your_template.html', {'form': form})

额外注意事项

  • 函数末尾必须添加render返回表单页面,否则会返回404错误。
  • 如果user.patients是OneToOneField关联的模型实例,修改字段后需单独调用user.patients.save(),否则更改不会持久化到数据库。
  • 表单验证失败时,form会自动携带错误信息,返回给前端后可直接展示给用户。

内容的提问来源于stack exchange,提问作者Nayan Khade

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 06:30:13