Django出现local variable 'Facility' referenced before assignment报错求助
问题解决方法
报错根因
你导入的Facility是模型类名,但是在POST请求处理逻辑中,你把从表单获取的字段值也命名为了Facility,Python解释器会将Facility识别为当前视图函数的局部变量,执行到第一行facilities=Facility.objects.order_by('id')时,检测到后续代码对局部变量Facility有赋值操作,就会抛出“局部变量在赋值前被引用”的错误。
修复方案
修改POST逻辑中的局部变量名,避免和模型类名重名即可,比如改成小写开头的facility或者selected_facility,修改后的视图代码参考:
def addshift(request): facilities=Facility.objects.order_by('id') user=request.user if request.method=="POST": StartTime=request.POST.get('StartTime') StartDate=request.POST.get('StartDate') EndTime=request.POST.get('EndTime') EndDate=request.POST.get('EndDate') # 修改变量名,避免和Facility类名冲突 selected_facility = request.POST.get('Facility') Note=request.POST.get('Note') shift=Shift(user=request.user,StartTime=StartTime,StartDate=StartDate,EndTime=EndTime,EndDate=EndDate,Facility=selected_facility,Note=Note) shift.save() messages.success(request,"Shift added successfully!") context={ 'schedule':'active', 'facilities':facilities, 'user':user, } return render(request,'addshift.html',context)
额外注意事项
如果你的Shift模型中Facility是关联Facility表的外键字段,直接传递表单获取的字符串ID会报错,需要改成传递Facility实例,或者给外键字段名加_id后缀传值,示例:
# 方法1:传实例 facility_obj = Facility.objects.get(id=selected_facility) shift=Shift(user=request.user,StartTime=StartTime,StartDate=StartDate,EndTime=EndTime,EndDate=EndDate,Facility=facility_obj,Note=Note) # 方法2:传id给外键_id字段 shift=Shift(user=request.user,StartTime=StartTime,StartDate=StartDate,EndTime=EndTime,EndDate=EndDate,Facility_id=selected_facility,Note=Note)
内容的提问来源于stack exchange,提问作者MohZaf66
相关产品推荐
相关产品推荐

