0

私は Django v1.4 を使用しており、一般的な ListView ビューをサブクラス化しようとしています。これがコードです

from django.views.generic import ListView

class SearchListView(ListView):
    model = None
    fields = None

    def get_queryset(self):
        #...etc...
        return super(SearchListView, self).get_queryset()

次に、特定のモデル用にそのビューをさらにカスタマイズします。

class PersonSearchListView(SearchListView):
    model = Person
    fields = ['first_name', 'last_name']

したがって、ImproperlyConfigured 例外は、モデルまたはクエリセットのいずれかを定義する必要があることを示すスーパークラス (ListView) です。私は…(モデル=人)だと思いました。この値がビューに反映されないのはなぜですか?

ありがとう

4

1 に答える 1

0

電話するときsuper(SearchListView, self).get_queryset()

モデルまたはクエリセットを設定しなかった場合に例外が発生することがわかるように、以下のクラスのget_querysetを呼び出します。

ListViewは、MultipleObjectMixinの子です。

ただし、PersonSearchListViewをインスタンス化する場合は、モデルが正しく設定されているはずです。URL設定を含めてもらえますか?後で試して、私の答えを更新します。

class MultipleObjectMixin(ContextMixin):
    """
    A mixin for views manipulating multiple objects.
    """
    allow_empty = True
    queryset = None
    model = None
    paginate_by = None
    context_object_name = None
    paginator_class = Paginator

    def get_queryset(self):
        """
        Get the list of items for this view. This must be an iterable, and may
        be a queryset (in which qs-specific behavior will be enabled).
        """
        if self.queryset is not None:
            queryset = self.queryset
            if hasattr(queryset, '_clone'):
                queryset = queryset._clone()
        elif self.model is not None:
            queryset = self.model._default_manager.all()
        else:
            raise ImproperlyConfigured("'%s' must define 'queryset' or 'model'"
                                       % self.__class__.__name__)
        return queryset
于 2012-09-26T03:40:02.453 に答える