【问题标题】:Django - WSGIRequest' object has no attribute 'Get'Django - WSGIRequest'对象没有属性'Get'
【发布时间】:2026-02-07 06:35:02
【问题描述】:

所以我有 2 个场景,其中一个有效,一个无效。我在 html 模板中设置了一个选择框,其中包含一些您可以在 Scenrio2 中看到的硬编码选项。 我很想知道为什么 Scenario2 没有问题,而 Scenario1 会抛出这个错误。我还附上了下面的堆栈跟踪。


场景1(不工作):

    current_status = 'All'
    status_list = []

    all_status = RequisitionStatus.objects.all()
    for status in all_status:
        status_list.append(status.status)

    if request.Get.get('Filter') in status_list:
        user_req_lines_incomplete = RequisitionLine.objects.filter(Q(parent_req__username=request.user) & Q(status__status=request.Get.get('Filter')))
        current_status = request.Get.get('Filter')
    else:
        user_req_lines_incomplete = RequisitionLine.objects.filter(parent_req__username=request.user).exclude(status__status='Completed')

场景2(工作):

if request.GET.get('Filter') == 'Created':
        user_req_lines_incomplete = RequisitionLine.objects.filter(Q(parent_req__username=request.user) & Q(status__status='Created'))
        current_status = 'Created'
    elif request.GET.get('Filter') == 'For Assistance':
        user_req_lines_incomplete = RequisitionLine.objects.filter(Q(parent_req__username=request.user) & Q(status__status='For Assistance'))
        current_status = 'For Assistance'
    elif request.GET.get('Filter') == 'Assistance Complete':
        user_req_lines_incomplete = RequisitionLine.objects.filter(Q(parent_req__username=request.user) & Q(status__status='Assistance Complete'))
        current_status = 'Assistance Complete'
    elif request.GET.get('Filter') == 'Assistance Rejected':
        user_req_lines_incomplete = RequisitionLine.objects.filter(Q(parent_req__username=request.user) & Q(status__status='Assistance Rejected'))
        current_status = 'Assistance Rejected'
    else:
        user_req_lines_incomplete = RequisitionLine.objects.filter(parent_req__username=request.user).exclude(status__status='Completed')

堆栈跟踪:

Traceback:

File "C:\Users\Kevin.Pardo\Documents\Python\venv\env\lib\site-packages\django\core\handlers\exception.py" in inner
  34.             response = get_response(request)

File "C:\Users\Kevin.Pardo\Documents\Python\venv\env\lib\site-packages\django\core\handlers\base.py" in _get_response
  126.                 response = self.process_exception_by_middleware(e, request)

File "C:\Users\Kevin.Pardo\Documents\Python\venv\env\lib\site-packages\django\core\handlers\base.py" in _get_response
  124.                 response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "C:\Users\Kevin.Pardo\Documents\Python\venv\env\lib\site-packages\django\contrib\auth\decorators.py" in _wrapped_view
  21.                 return view_func(request, *args, **kwargs)

File "C:\Users\Kevin.Pardo\Documents\Python\django\lambda\req\views.py" in pending_action
  241.     if request.Get.get('Filter') in status_list:

Exception Type: AttributeError at /req/pending/
Exception Value: 'WSGIRequest' object has no attribute 'Get'

【问题讨论】:

  • 你在视图中写了request.Get,而不是request.GET
  • 哇,太尴尬了。我知道它应该同样有效,因为我在 shell 中对其进行了测试。谢谢你帮我看

标签: django django-views


【解决方案1】:

这与您遵循的方法无关。在您的第一种方法中,您写道:

if request.Get.get('Filter') in status_list:
  # ...

就像错误所说,request 对象没有Get 属性,只有GET 属性。你在视图的其余部分犯了同样的错误。

所以你可以解决这个问题:

if request.GET.get('Filter') in status_list:
  # ...

您还在过滤(两个视图)中写了parent_req__username=request.user,我认为使用parent_req=request.userparent_req__username=request.user.username可能会更好。

实际上,您可以进一步改进这一点:

current_status = 'All'
all_status = RequisitionStatus.objects.values_list('status', flat=True)
filter = request.GET.get('filter')

if filter in status_list:
    user_req_lines_incomplete = RequisitionLine.objects.filter(
        parent_req=request.user,
        status__status=filter
    )
    current_status = filter
else:
    user_req_lines_incomplete = RequisitionLine.objects.filter(
        parent_req=request.user
    ).exclude(
        status__status='Completed'
    )

【讨论】:

  • 是的,谢谢,我的 scenrio2 是为了测试目的,然后我决定压缩代码并犯了愚蠢的错误。我一直在寻找“Get”必须是 GET
  • @K.Pardo:我建议您阅读错误消息。与其他环境相比,Python 实际上有非常好的异常消息来查明问题。
  • 有时需要另一双眼睛才能看到问题。我知道问题出在哪里,但一直在查看 Get。很容易将两者混合在一起。不过我明白你在说什么。谢谢你的建议。