Django DetailViewでImproperlyConfigured例外が発生した時の対処法

Dajngoで詳細ビューを使っているときに次の様な例外が発生する事があります。

django.core.exceptions.ImproperlyConfigured: <classname> is missing a QuerySet. Define UserDetailView.model, <classname>.queryset, or override <classname>.get_queryset().

これは主にquerysetやmodelを定義していない場合に発生します。

今回はこの例外が発生する原因と、対処法を解説します。

発生原因

通常、DetaiViewを使うときは以下の様にmodelやquerysetを定義する必要があります。両方定義してもどちらか一方のみ定義しても構いません。

from django.views.generic.detail import DetailView
from django.contrib.auth.models import User

class UserDetailView(DetailView):
    model = User
    queryset = User.objects.all()
    template_name='accounts/detail.html'

しかし、両方とも定義していない場合、ImproperlyConfigured例外が発生します。

django.core.exceptions.ImproperlyConfigured: <classname> is missing a QuerySet. Define <classname>.model, <classname>.queryset, or override <classname>.get_queryset().

(翻訳)
<classname>のクエリセットが見つかりません。<classname>.modelや<classname>.querysetを定義するか、<classname>.get_queryset()をオーバーライドしてください。

対処法

次の2つの対処法があります。

  • querysetやmodelを定義する
  • get_querysetメソッドをオーバーライドする
スポンサーリンク
スポンサーリンク