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

UnboundLocalError报错及Django查询shipment_booking表ord字段问题咨询

问题根源
  • 循环变量命名与Django模型类名shipment_booking重名,根据Python作用域规则,函数内只要对某变量赋值会被识别为局部变量,导致第3行shipment_booking.objects.all()调用时,局部变量还未赋值就被引用,直接触发UnboundLocalError报错
  • 函数第4行提前执行了return render(request, 'bkp1.html'),后续POST校验、字段判断逻辑完全无法执行,属于无效死代码
  • 业务逻辑存在缺陷:全表遍历校验时,只要第一条记录不符合就直接返回结果,不会校验所有记录
  • 字段名不匹配:需求要求校验ord字段,代码中写的是ords字段,会导致取值错误
修复后代码
def bkp1(request):
    orderv = "yes"
    if request.method == 'POST' and 'pbd' in request.POST:
        # 数据库层直接查询是否存在ord为yes的记录,性能远高于全表遍历
        has_valid_order = shipment_booking.objects.filter(ord=orderv).exists()
        if has_valid_order:
            return render(request, 'Pre-Budget.html')
        else:
            return render(request, 'bkp1.html', {'msg': 'Please Add Order Details'})
    # 非POST请求直接返回页面
    return render(request, 'bkp1.html')
修改说明
  • 调整循环逻辑为数据库exists()查询,避免变量名与模型类重名,彻底解决UnboundLocalError报错
  • 删除开篇多余的return语句,保证业务逻辑正常执行
  • 字段名与需求对齐,避免取值错误
  • 调整请求判断顺序,非POST请求不需要查询数据库,减少不必要的性能消耗
  • 修复原遍历逻辑的缺陷,只要存在符合要求的记录就返回对应页面,否则返回提示

内容的提问来源于stack exchange,提问作者Indranil Saha

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 15:39:02