Django/python: 'function' object has no attribute 'as_view'

只愿长相守 提交于 2019-11-29 12:43:18

问题


I am trying to create a list_view for a model queryset. When running my server, it returns : attribute error - 'function' object has no attribute 'as_view'. I would appreciate helping me in solve this.

Here's my code:

Views.py:

@login_required 
class live_bids(ListView):

    model = Post 
    template_name = 'loggedin_load/live_bids.html'

    def get_queryset(self):
        return Post.objects.all().prefetch_related('bids').filter(user=self.request.user)

urls.py:

 url(r'^live_bids/$', live_bids.as_view()),

回答1:


You can't use the login_required decorator on a class like that. You need to use method_decorator. On Django 1.9+, you can decorate the class:

from django.contrib.auth.decorators import login_required
from django.utils.decorators import method_decorator

@method_decorator(login_required, name='dispatch')
class LiveBids(LoginRequiredMixin, ListView):
    ...

On earlier versions, you need to override dispatch and use method_decorator there.

class LiveBids(LoginRequiredMixin, ListView):
    @method_decorator(login_required)
    def dispatch(self, *args, **kwargs):
        return super(LiveBids, self).dispatch(*args, **kwargs)

The easiest solution is to use LoginRequiredMixin instead of the decorator (works with Django 1.9+)

from django.contrib.auth.mixins import LoginRequiredMixin

class LiveBids(LoginRequiredMixin, ListView):
    model = Post 
    template_name = 'loggedin_load/live_bids.html'

    def get_queryset(self):
        return Post.objects.all().prefetch_related('bids').filter(user=self.request.user)

Note that in the examples, I have renamed the view to LiveBids, to match the recommended Django style. You'll have to update the url pattern as well.



来源:https://stackoverflow.com/questions/38724387/django-python-function-object-has-no-attribute-as-view

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!