モデルクエリセットのlist_viewを作成しようとしています。サーバーを実行すると、次のエラーが返されます:属性エラー-'function'オブジェクトに属性 'as_view'がありません。これを解決するのを手伝っていただければ幸いです。
これが私のコードです:
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()),
そのようなクラスではlogin_required
デコレータを使用できません。 method_decorator
を使用する必要があります。 Django 1.9+では、クラスを装飾できます:
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):
...
以前のバージョンでは、dispatch
をオーバーライドし、そこでmethod_decorator
を使用する必要があります。
class LiveBids(LoginRequiredMixin, ListView):
@method_decorator(login_required)
def dispatch(self, *args, **kwargs):
return super(LiveBids, self).dispatch(*args, **kwargs)
最も簡単な解決策は、デコレータの代わりに LoginRequiredMixin
を使用することです(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)
例では、推奨されるDjangoスタイルに合わせて、ビューの名前をLiveBids
に変更しました。URLパターンも更新する必要があります。