2012-09-26 137 views
0

我正在使用Django v1.4,我試圖繼承泛型ListView視圖。下面的代碼繼承Django 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控件),要麼模型或查詢集應被定義。我以爲我是......(model = Person)。爲什麼這個價值觀沒有納入觀點?

感謝

+0

也許你可以嘗試從SearchListView中刪除model = None和fields = None。你可以發佈實例化PersonSearchListView的代碼嗎? 我的猜測是,當初始化PersonSearchListView它首先調用SearchListView構造函數,但是當它構造SearchListView時,模型仍然是None。 –

+0

實例化PersonSearchListView的代碼位於urls.py中。 PersonSearchListView.as_view()。原來在SearchListView類中聲明模型和字段是OK的。其實,我不知道我做了什麼才能使它工作。我的代碼充滿了失敗嘗試的評論。我試圖讓它回到與我上面的示例代碼內聯,並突然它工作。我在想我有一個類名錯別字或urls配置問題。 :) – lingrlongr

+0

是保持你的代碼清潔是重要的,它將防止大量的錯誤,並使查找錯誤更容易。它會爲你節省時間。 –

回答

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