Даже если это класс, почему 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 = FutsalTimeline
    form_class = UpdateActiveStatus
    template_name = 'timeline.html'
    success_url = reverse_lazy('timeline')

Вы не можете использовать декоратор @login_required [Django-doc]: этот декоратор возвращает функцию, но даже использование функции не сработает: декоратор просто не может обрабатывать класс.

Для представлений на основе классов вы используете LoginRequiredMixin [Django-doc]:

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')
    login_url = '/admin/'

Я думаю, что проблема генерируется для decorator. Просто измените его как ->

@method_decorator(login_required, name='dispatch')
class UpdateActiveStatus(UpdateView):
    model = FutsalTimeline
    form_class = UpdateActiveStatus
    template_name = 'timeline.html'
    success_url = reverse_lazy('timeline')

Вы можете найти документ здесь

  • Но вы должны использовать 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')
    

Вы можете найти документ здесь

Вернуться на верх