ListViewを使っていると次の様な例外が発生する事があります。
<classname> is missing a QuerySet. Define <classname>.model, <classname>.queryset, or override <classname>.get_queryset().
この例外は、modelやqueryset変数を定義していなかったり、get_querysetメソッドをオーバーライドしていない場合に発生します。
今回はこの例外が発生する原因や対処法を詳しく解説します。
例外の発生原因
ListViewを使うときは次のコードの様に、model変数やqueryset変数を定義する必要があります。どちらか一方だけでも構いません。
from django.contrib.auth.models import User
from django.views.generic.list import ListView
class UserListView(ListView):
model = User
queryset = User.objects.all()
動的にquerysetを変更したい場合は、get_querysetメソッドをオーバーライドするだけでも問題ないです。
しかし、どれもmodel変数やqueryset変数を定義していなかったり、get_querysetメソッドをオーバーライドしていない場合は次の様な例外が発生します。
django.core.exceptions.ImproperlyConfigured: <classname> is missing a QuerySet. Define <classname>.model, <classname>.queryset, or override <classname>.get_queryset().
(翻訳)
<classname>にQuerySetがありません。<classname>.modelや<classname>.querysetを定義するか<classname>.get_queryset()をオーバーライドしてください。
対処法
次の2つの対処法が考えられます。
- model変数やqueryset変数を定義する
- get_queryメソッドをオーバーライドする
コメントを残す