AttributeError:“字节”对象没有属性

时间:2019-07-22 16:56:37

标签: django django-class-based-views django-request

我有一个正在检查用户权限的类,并且根据他们,从模型返回结果的列表。这是我所拥有的:

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

然后我像这样在process_results中调用TemplateView函数:

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函数一样,它不返回列表,而是返回整个网页。我不明白为什么会这样,因为在没有任何更改的情况下它运行良好。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

您不应从get_results返回HttpRequest。而是引发PermissionDenied错误。

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

如果要重定向到其他页面,请在视图中进行处理。您可以捕获PermissionDenied并返回重定向。