“匿名用户”对象没有“用户类型”属性

2024-05-10 04:35:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在我的base.html文件中显示数据,所以我决定使用上下文处理器来实现这一点。在mymodels.py上,我覆盖用户模型以使用AbstractBaseUser,因此我可以在我的用户模型上添加User\u type属性 下面是我的代码。

在上下文处理器上.py

def meeting_notifications(request):
    if request.user.user_type == 'CDA Admin':
        n = Meetings.objects.filter(meeting_class='CDA Admin')
        context = {'notifications':n}
        return context
    elif request.user.user_type == 'CDA Member':
        n = Meetings.objects.filter(meeting_class='CDA Member')
        context = {'notifications':n}
        return context

但下面是我得到的错误

    Internal Server Error: /                                                                  
Traceback (most recent call last):                                                        
  File "C:\Users\Benedict\Miniconda3\envs\mycda\lib\site-packages\django\core\handlers\exception.py", line 34, in inner                                                             
    response = get_response(request)                                                      
  File "C:\Users\Benedict\Miniconda3\envs\mycda\lib\site-packages\django\core\handlers\base.py", line 115, in _get_response                                                         
    response = self.process_exception_by_middleware(e, request)                           
  File "C:\Users\Benedict\Miniconda3\envs\mycda\lib\site-packages\django\core\handlers\base.py", line 113, in _get_response                                                         
    response = wrapped_callback(request, *callback_args, **callback_kwargs)               
  File "D:\mycda\backend\views.py", line 38, in sample                                    
    return render(request, 'dashboard/sample.html')                                       
  File "C:\Users\Benedict\Miniconda3\envs\mycda\lib\site-packages\django\shortcuts.py", line 19, in render                                                                          
    content = loader.render_to_string(template_name, context, request, using=using)       
  File "C:\Users\Benedict\Miniconda3\envs\mycda\lib\site-packages\django\template\loader.py", line 62, in render_to_string                                                          
    return template.render(context, request)                                              
  File "C:\Users\Benedict\Miniconda3\envs\mycda\lib\site-packages\django\template\backends\django.py", line 61, in render                                                           
    return self.template.render(context)                                                  
  File "C:\Users\Benedict\Miniconda3\envs\mycda\lib\site-packages\django\template\base.py", line 169, in render                                                                     
    with context.bind_template(self):                                                     
  File "C:\Users\Benedict\Miniconda3\envs\mycda\lib\contextlib.py", line 113, in __enter__                                                                                          
    return next(self.gen)                                                                 
  File "C:\Users\Benedict\Miniconda3\envs\mycda\lib\site-packages\django\template\context.py", line 246, in bind_template                                                           
    updates.update(processor(self.request))                                               
  File "D:\mycda\backend\context_processor.py", line 6, in meeting_notifications          
    if request.user.user_type == 'CDA Admin':                                             
  File "C:\Users\Benedict\Miniconda3\envs\mycda\lib\site-packages\django\utils\functional.py", line 225, in inner                                                                   
    return func(self._wrapped, *args)                                                     
AttributeError: 'AnonymousUser' object has no attribute 'user_type'                       
[16/Aug/2020 06:54:40] "GET / HTTP/1.1" 500 103661

  

当我添加@login_required并检查用户是否已通过验证时,如下面的代码所示

@login_required(login_url='/backoffice/')
def meeting_notifications(request):
    if request.user.is_authenticated:
        if request.user.user_type == 'CDA Admin':
            n = Meetings.objects.filter(meeting_class='CDA Admin')
            context = {'notifications':n}
            return context
        elif request.user.user_type == 'CDA Member':
            n = Meetings.objects.filter(meeting_class='CDA Member')
            context = {'notifications':n}
            return context

我现在在尝试加载页面时出现了一个新错误。如果我得到别人的帮助,我会很感激的

    Traceback (most recent call last):                                                        
  File "C:\Users\Benedict\Miniconda3\envs\mycda\lib\site-packages\django\core\handlers\exception.py", line 34, in inner                                                             
    response = get_response(request)                                                      
  File "C:\Users\Benedict\Miniconda3\envs\mycda\lib\site-packages\django\core\handlers\base.py", line 115, in _get_response                                                         
    response = self.process_exception_by_middleware(e, request)                           
  File "C:\Users\Benedict\Miniconda3\envs\mycda\lib\site-packages\django\core\handlers\base.py", line 113, in _get_response                                                         
    response = wrapped_callback(request, *callback_args, **callback_kwargs)               
  File "D:\mycda\backend\views.py", line 38, in sample                                    
    return render(request, 'dashboard/sample.html')                                       
  File "C:\Users\Benedict\Miniconda3\envs\mycda\lib\site-packages\django\shortcuts.py", line 19, in render                                                                          
    content = loader.render_to_string(template_name, context, request, using=using)       
  File "C:\Users\Benedict\Miniconda3\envs\mycda\lib\site-packages\django\template\loader.py", line 62, in render_to_string                                                          
    return template.render(context, request)                                              
  File "C:\Users\Benedict\Miniconda3\envs\mycda\lib\site-packages\django\template\backends\django.py", line 61, in render                                                           
    return self.template.render(context)                                                  
  File "C:\Users\Benedict\Miniconda3\envs\mycda\lib\site-packages\django\template\base.py", line 169, in render                                                                     
    with context.bind_template(self):                                                     
  File "C:\Users\Benedict\Miniconda3\envs\mycda\lib\contextlib.py", line 113, in __enter__                                                                                          
    return next(self.gen)                                                                 
  File "C:\Users\Benedict\Miniconda3\envs\mycda\lib\site-packages\django\template\context.py", line 246, in bind_template                                                           
    updates.update(processor(self.request))                                               
ValueError: dictionary update sequence element #0 has length 0; 2 is required             
[16/Aug/2020 06:57:59] "GET / HTTP/1.1" 500 96414

Tags: djangoinpyrequestlibcontextlinesite