2016-08-02 1 views
9

J'essaie de créer un list_view pour un jeu de requête. Lors de l'exécution de mon serveur, il renvoie: erreur d'attribut - l'objet 'fonction' n'a pas d'attribut 'as_view'. J'apprécierais m'aider à résoudre ceci.Django/python: l'objet 'function' n'a pas d'attribut 'as_view'

Voici mon 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()), 

Répondre

21

Vous ne pouvez pas utiliser le décorateur login_required sur une classe comme ça. Vous devez utiliser method_decorator. Sur Django 1.9+, vous pouvez décorer la classe:

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): 
    ... 

Sur les versions antérieures, vous devez passer outre dispatch et y utiliser method_decorator.

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

La solution est d'utiliser plus facile LoginRequiredMixin au lieu du décorateur (fonctionne avec 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) 

Notez que dans les exemples, j'ai renommé en vue de LiveBids, pour correspondre à la recommandation Style Django. Vous devrez également mettre à jour le modèle d'URL.

+0

Y at-il un moyen de le faire pour flacon? –

+1

@JohnSmith cette question n'a rien à voir avec flacon. S'il vous plaît poser une nouvelle question. – Alasdair

+0

[fait] (https://stackoverflow.com/questions/46932366/how-to-use-login-required-with-a-class-in-flask) –