2016-08-02 31 views
9

Model queryset için bir list_view oluşturmaya çalışıyorum. Sunucumu çalıştırırken, döndürür: attribute error - 'function' nesnesi 'as_view' özelliğine sahip değil. Bunu çözmemde bana yardımcı olurum.Django/python: 'function' nesnesinin 'as_view' özniteliği yok

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

cevap

21

Böyle bir sınıf üzerinde login_required dekoratör kullanamazsınız

Views.py:

İşte benim kod. method_decorator'u kullanmanız gerekir. Django 1.9+ üzerinde, sınıf dekore edebilirsiniz:

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

önceki sürümlerinde, dispatch geçersiz kılmak ve orada method_decorator kullanmak gerekir.

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

kolay çözüm örneklerde, ben LiveBids görünümü değiştirildi ki

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) 

Not tavsiye maç için (1.9+ Django ile çalışır) yerine dekoratör LoginRequiredMixin kullanmaktır Django stili. URL modelini de güncellemeniz gerekir.

+0

Şişesi için bunu yapmanın bir yolu var mı? –

+1

@JohnSmith bu sorunun flaskla ilgisi yok. Lütfen yeni bir soru sorun. – Alasdair

+0

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

İlgili konular