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

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更高效:

  1. 修改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()  # 保持原有的文本框样式
        }
  1. 修改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,需要手动实现数据保存逻辑并传递当前用户:

  1. 修改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']
        )
  1. 修改views.py中的save调用:
if form.is_valid():
    form.save(request.user)  # 传递当前用户到save方法
    return redirect('user_attendance')

内容的提问来源于stack exchange,提问作者GEORGE JR GESITE

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 21:55:25