我有一个基于工人阶级的观点。但是在添加@login_required时出现错误:
AttributeError:“函数”对象没有属性“ as_view”
这里的ResultListView发生了什么事情
from django.urls import path
from .views import ResultListView
urlpatterns = [
path('meetings/', ResultListView.as_view(), name='meetings'),
]
我的views.py:
@login_required
class ResultListView(ListView):
template_name = ...
def get_queryset(self):
return Result.objects.filter(rider__user=self.request.user)
在我将装饰器放入之前,一切正常。现在非常困惑,我不明白为什么 ResultListView 在通过装饰器发送时会失去其属性。
答案 0 :(得分:1)
@Login_Required
装饰器仅装饰函数,而不装饰类,您可以使用mixin,也可以装饰.as_view()
调用结果的函数。
LoginRequiredMixin
您可以利用将ListView
放在父类中的LoginRequiredMixin
[Django-doc]之前,将它们放在父类中:
from django.contrib.auth.mixins import LoginRequiredMixin
class ResultListView(LoginRequiredMixin, ListView):
template_name = …
def get_queryset(self):
return Result.objects.filter(rider__user=self.request.user)
.as_view()
结果另一种方法是修饰.as_view
的结果,该结果确实是一个函数:
from django.urls import path
from .views import ResultListView
from django.contrib.auth.decorators import login_required
urlpatterns = [
path('meetings/', login_required(ResultListView.as_view()), name='meetings'),
]