2016-08-02 31 views
9

Ich versuche, eine list_view für eine Modell-Abfrage erstellen. Wenn mein Server ausgeführt wird, gibt es zurück: Attributfehler - Objekt 'Funktion' hat kein Attribut 'as_view'. Ich würde mich freuen, mir dabei helfen zu können.Django/Python: 'Funktion' Objekt hat kein Attribut 'as_view'

Hier ist mein 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()), 

Antwort

21

Sie nicht die login_required Dekorateur für eine Klasse wie das verwenden können. Sie müssen method_decorator verwenden. Auf Django 1.9+, können Sie die Klasse dekorieren:

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

Bei früheren Versionen, müssen Sie dispatch und verwenden method_decorator dort außer Kraft zu setzen.

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

Die einfachste Lösung ist LoginRequiredMixin anstelle des Dekorateur zu verwenden (funktioniert mit 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) 

Beachten Sie, dass in den Beispielen habe ich den Blick auf LiveBids, umbenannt die empfohlene anzupassen Django-Stil. Sie müssen das URL-Muster ebenfalls aktualisieren.

+0

gibt es eine Möglichkeit, es für Kolben zu tun? –

+1

@JohnSmith diese Frage hat nichts mit Kolben zu tun. Bitte stellen Sie eine neue Frage. – Alasdair

+0

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