Even though its a class why is AttributeError: 'function' object has no attribute 'as_view'
Even though its a class why is AttributeError: 'function' object has no attribute 'as_view'
尽管它是一个基于类的函数,但为什么在我使用 login_required
时会弹出此属性错误
错误信息
path('active/<int:pk>', UpdateActiveStatus.as_view(), name="activeStatus"),
AttributeError: 'function' object has no attribute 'as_view'
views.py
@login_required(login_url='/admin/')
class UpdateActiveStatus(UpdateView):
model = Timeline
form_class = UpdateActiveStatus
template_name = 'timeline.html'
success_url = reverse_lazy('timeline')
你不能使用@login_required
decorator [Django-doc]:这个装饰器returns一个函数,但是即使使用这个函数也不行:这个装饰器根本无法处理一个class.
对于基于 class 的视图,您使用 LoginRequiredMixin
[Django-doc]:
from django.contrib.auth.mixins import <strong>LoginRequiredMixin</strong>
class UpdateActiveStatus(<strong>LoginRequiredMixin</strong>, UpdateView):
model = FutsalTimeline
form_class = UpdateActiveStatus
template_name = 'timeline.html'
success_url = reverse_lazy('timeline')
<strong>login_url = '/admin/'</strong>
我认为问题是由 装饰器 产生的。只需将其更改为 ->
@method_decorator(login_required, name='dispatch')
class UpdateActiveStatus(UpdateView):
model = FutsalTimeline
form_class = UpdateActiveStatus
template_name = 'timeline.html'
success_url = reverse_lazy('timeline')
您可以找到文档 here
但是你应该使用 Mixin classes。使用 Mixin class 它看起来像
from django.contrib.auth.mixins import LoginRequiredMixin
class UpdateActiveStatus(LoginRequiredMixin, UpdateView):
model = FutsalTimeline
form_class = UpdateActiveStatus
template_name = 'timeline.html'
success_url = reverse_lazy('timeline')
您可以找到文档 here
尽管它是一个基于类的函数,但为什么在我使用 login_required
时会弹出此属性错误错误信息
path('active/<int:pk>', UpdateActiveStatus.as_view(), name="activeStatus"),
AttributeError: 'function' object has no attribute 'as_view'
views.py
@login_required(login_url='/admin/')
class UpdateActiveStatus(UpdateView):
model = Timeline
form_class = UpdateActiveStatus
template_name = 'timeline.html'
success_url = reverse_lazy('timeline')
你不能使用@login_required
decorator [Django-doc]:这个装饰器returns一个函数,但是即使使用这个函数也不行:这个装饰器根本无法处理一个class.
对于基于 class 的视图,您使用 LoginRequiredMixin
[Django-doc]:
from django.contrib.auth.mixins import <strong>LoginRequiredMixin</strong>
class UpdateActiveStatus(<strong>LoginRequiredMixin</strong>, UpdateView):
model = FutsalTimeline
form_class = UpdateActiveStatus
template_name = 'timeline.html'
success_url = reverse_lazy('timeline')
<strong>login_url = '/admin/'</strong>
我认为问题是由 装饰器 产生的。只需将其更改为 ->
@method_decorator(login_required, name='dispatch')
class UpdateActiveStatus(UpdateView):
model = FutsalTimeline
form_class = UpdateActiveStatus
template_name = 'timeline.html'
success_url = reverse_lazy('timeline')
您可以找到文档 here
但是你应该使用 Mixin classes。使用 Mixin class 它看起来像
from django.contrib.auth.mixins import LoginRequiredMixin class UpdateActiveStatus(LoginRequiredMixin, UpdateView): model = FutsalTimeline form_class = UpdateActiveStatus template_name = 'timeline.html' success_url = reverse_lazy('timeline')
您可以找到文档 here