AttributeError: 'bytes' object has no attribute

AttributeError: 'bytes' object has no attribute

我有一个 class,我在其中检查用户权限,并根据它们,我 return 模型结果的 列表 。这是我拥有的:

from AnnualLeave.models import Leaves, RejectedLeaves, Employee

class GetLeaves:

    def get_results(request):
        try:
            if request.user.groups.filter(name__in=['SuperAdmin']).exists():
                return Leaves.objects.all()
            elif request.user.groups.filter(name__in=['Admin']).exists():
                return Leaves.objects.filter(employee_id=Employee.objects.get(manager_id=request.user.pk))
            else:
                messages.error(request, "You are not allowed on this page")
                return render(request, 'users/home.html')

        except (Leaves.DoesNotExist, Employee.DoesNotExist):
            return []

    def process_results(request):
        leave_request = []
        for leave in GetLeaves.get_results(request):
            content = {'emp_id': leave.employee_id,
                       'emp_name': Employee.objects.get(user_id=leave.employee_id).user.get_full_name(),
                       'start_date': leave.start_date,
                       'end_date': leave.end_date,
                       'reason': leave.get_reason_display(),
                       'description': leave.description,
                       }
        ....

            leave_request.append(content)

        return leave_request

然后我在 TemplateView 中调用 process_results 函数,如下所示:

class ProcessLeaveRequest(TemplateView):
    template_name = 'LMSAdmin/process_leave_request.html'

    def get(self, request, *args, **kwargs):
        return render(request, self.template_name, {'leave_requests': GetLeaves.process_results(request)})

这里是错误的回溯:

Internal Server Error: /lms_admin/upcomingleaves/
Traceback (most recent call last):
  File "C:\Program Files (x86)\Python37-32\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
    response = get_response(request)
  File "C:\Program Files (x86)\Python37-32\lib\site-packages\django\core\handlers\base.py", line 115, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "C:\Program Files (x86)\Python37-32\lib\site-packages\django\core\handlers\base.py", line 113, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "C:\Program Files (x86)\Python37-32\lib\site-packages\django\views\generic\base.py", line 71, in view
    return self.dispatch(request, *args, **kwargs)
  File "C:\Program Files (x86)\Python37-32\lib\site-packages\django\views\generic\base.py", line 97, in dispatch
    return handler(request, *args, **kwargs)
  File "D:\Projects\LMS\LMSAdmin\views.py", line 77, in get
    for leave in GetLeaves.process_results(request):
  File "D:\Projects\LMS\LMSAdmin\views.py", line 39, in process_results
    content = {'emp_id': leave.employee_id,
AttributeError: 'bytes' object has no attribute 'employee_id'

据我所知,它是通过函数中的request参数读取整个网页。就像get_results函数不是returning一个列表,而是整个网页。我不明白为什么会这样,因为它之前工作正常,没有任何更改。非常感谢任何帮助。

您不应该 return 来自 get_results 的 HttpRequest。而是引发 PermissionDenied 错误。

else:
    from django.core.exceptions import PermissionDenied
    messages.error(request, "You are not allowed on this page")
    raise PermissionDenied

如果您想重定向到其他页面,请在视图中进行处理。您可以捕获 PermissionDenied 和 return 重定向。