2013-02-14 35 views
1

我想了解Django的基於類的視圖(非常新),特別是,ListView。我正在努力理解「業務邏輯應該走向何方」。比方說,我有下面的類:在哪裏包括業務邏輯在列表視圖類方法

#views.py 
class DisplayListView(ListView): 
    model = Cars 
    template_name = "searchres_list.html" 
    paginate_by = '5' 
    context_object_name = "titles" 

def get_context_data(self, **kwargs): 
    context = super(SearchDisplayListView, self).get_context_data(**kwargs) 
      # custom logic whoch spits out "now". in this example [1 -->10] 
    context['now'] = [1,2,3,4,5,6,7,8,9,10] 
    return context 

它工作正常,我能看的[1 - > 10]在我的模板。但是,當我查看ListView下的方法時,我發現我可能在get_queryset方法中包含了我的邏輯。所以,像這樣:

def get_queryset(self): 
    # Fetch the queryset from the parent get_queryset 
    queryset = super(SearchDisplayListView, self).get_queryset() 
      # custom logic whoch spits out "now". in this example [1 -->10] 
    queryset = [1,2,3,4,5,6,7,8,9,10] 
      return queryset 

所以,我寧願(愚蠢的)問題是(或曾經我得到了這一切完全錯誤的!),應該在哪裏的商業邏輯非常去:

  1. 高清get_context_data
  2. def get_queryset

謝謝你的時間。

回答

2

這樣一個主觀問題的最好答案可能是:這取決於。

我個人的算法來處理這樣的情況是:

  • ,如果你需要的東西添加到背景將被傳遞給模板,那麼你就沒有因爲在get_queryset方法中,您只能修改ListView的查詢集。所以我在這種情況下使用get_context_data。
  • ,但如果你要執行一些動態查詢集修改,讓我們說你的觀點可以在類似的模型類操作和實際的類被傳遞給視圖的參數決定的,那麼很可能你需要覆蓋get_queryset方法。

希望我給你的話題:)

+0

感謝這麼多的一些見解 - 但是我不明白你的第一個問題 - 你是什麼意思「,因爲在get_queryset方法,你只能修改你的ListView的queryset「你能解釋一下嗎?正如我所看到的,我可以將查詢集或上下文數據傳遞給模板 - 除了模板標籤之外,無論我在哪裏放置數據 - 查詢集或上下文,一切似乎都正常工作。這不是這種情況嗎? – AJW 2013-02-15 11:05:08

+0

所以,當你從''get_queryset''方法改變''queryset''屬性時,你基本上會改變模板中的''object_list''。你不能在get_queryset中添加一個表單對象。你需要使用''get_context_data''來實現這一點。 – dragoon 2013-02-15 11:18:47

+0

謝謝 - 我現在明白了!接受你的回答:) – AJW 2013-02-15 11:28:15