Django报错‘WSGIRequest’ object has no attribute ‘get’ 的解决方法
修复‘WSGIRequest’ object has no attribute ‘get’报错问题
错误原因分析
这个报错通常是因为代码中把WSGIRequest对象当成字典类对象调用了.get()方法,或者表单处理逻辑不符合Django规范。结合你提供的代码,可能的触发点有两个:
- 模板中错误使用了
request.get(应为大写的request.GET) - 普通
forms.Form的save方法未正确实现,且未关联数据库模型操作
修复方案
方案1:修正模板中的错误(若存在)
检查你的user_attendance.html模板,若出现类似{{ request.get.xxx }}的代码,将其改为{{ request.GET.xxx }}(注意GET是大写)。WSGIRequest对象只有GET/POST属性(均为带.get()方法的QueryDict对象),没有小写的get属性。
方案2:改用ModelForm处理表单(推荐)
因为你需要将表单数据保存到数据库,Django的ModelForm会自动处理模型关联和数据保存,比普通forms.Form更高效:
- 修改
forms.py:
from django import forms from .models import Compensation # 替换为你的实际模型类 class CompensationRequestForm(forms.ModelForm): class Meta: model = Compensation fields = ['date', 'reason'] widgets = { 'reason': forms.Textarea() # 保持原有的文本框样式 }
- 修改
views.py中的表单保存逻辑:
def user_attendance(request): attendance_records = Attendance.objects.filter(user=request.user) form = CompensationRequestForm() if request.method == 'POST': form = CompensationRequestForm(request.POST) if form.is_valid(): # 先创建实例但不提交到数据库,关联当前用户后再保存 compensation = form.save(commit=False) compensation.user = request.user compensation.save() return redirect('user_attendance') context = {'attendance_records': attendance_records, 'form': form} return render(request, 'user_attendance.html', context)
方案3:保留forms.Form并正确实现save方法
如果坚持使用普通Form,需要手动实现数据保存逻辑并传递当前用户:
- 修改
forms.py:
from django import forms from .models import Compensation # 替换为你的实际模型类 class CompensationRequestForm(forms.Form): date = forms.DateField() reason = forms.CharField(widget=forms.Textarea) def save(self, user): # 手动创建模型实例并保存 Compensation.objects.create( user=user, date=self.cleaned_data['date'], reason=self.cleaned_data['reason'] )
- 修改
views.py中的save调用:
if form.is_valid(): form.save(request.user) # 传递当前用户到save方法 return redirect('user_attendance')
内容的提问来源于stack exchange,提问作者GEORGE JR GESITE
相关产品推荐
相关产品推荐

