2016-08-02 53 views
9

Próbuję utworzyć listing_view dla zestawu zapytań modelu. Podczas uruchamiania mojego serwera zwraca: błąd atrybutu - obiekt "funkcja" nie ma atrybutu "as_view". Byłbym wdzięczny za pomoc w rozwiązaniu tego problemu.Django/python: Obiekt 'function' nie ma atrybutu "as_view"

Oto mój kod:

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

Odpowiedz

21

Nie można używać login_required dekorator w klasie takiego. Musisz użyć method_decorator. Na Django 1.9+, można ozdobić klasę:

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

na wcześniejszych wersjach, trzeba zastąpić dispatch i używać method_decorator tam.

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

Najprostszym rozwiązaniem jest użycie LoginRequiredMixin zamiast dekoratora (działa z 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) 

zauważyć, że w przykładach I przemianowany na stanowisku do LiveBids, pasujące zalecana Styl Django. Będziesz musiał również zaktualizować wzór adresu URL.

+0

czy jest jakiś sposób na zrobienie tego w przypadku kolby? –

+1

@JohnSmith to pytanie nie ma nic wspólnego z kolbą. Zadaj nowe pytanie. – Alasdair

+0

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