2017-10-20 54 views
0

我想使用get_queryset()與基於類的視圖,但我不克服,以顯示我的模板中的變量。Django基於類的查看與get_queryset()

的功能很簡單:

class MyClassView(LoginRequiredMixin, ListView) : 

    template_name = 'my_template.html' 
    model = Foo 

    def get_queryset(self) : 

     foo = Foo.objects.order_by('-id') 
     bar = foo.filter(Country=64) 
     return foo, bar 

而且我的模板:

<table style="width:120%"> 
       <tbody> 
       <tr> 
        <th>ID</th> 
       </tr> 
       {% for item in foo %} 
       <tr> 
        <td>{{ foo.id }}</td> 
       </tr> 
       {% endfor %} 
       </tbody> 
      </table> 
<br></br> 
<table style="width:120%"> 
       <tbody> 
       <tr> 
        <th>ID</th> 
       </tr> 
       {% for item in bar %} 
       <tr> 
        <td>{{ bar.id }}</td> 
       </tr> 
       {% endfor %} 
       </tbody> 
      </table> 

我不得不使用Context字典?

回答

3

對於ListViewget_queryset方法應返回單個查詢集(或項目列表)。如果你想另一個變量添加到環境中,然後覆蓋get_context_data還有:

class MyClassView(LoginRequiredMixin, ListView) : 

    template_name = 'my_template.html' 
    model = Foo 

    def get_queryset(self) : 
     queryset = Foo.objects.order_by('-id') 
     return queryset 

    def get_context_data(self, **kwargs): 
     context = super(MyClassView, self).get_context_data(**kwargs) 
     context['bar_list'] = context['foo_list'].filter(Country=64) 
     return context 

在模板進行ListView,你object_list<model>_list(例如foo_list),unless you set context_object_name訪問查詢集。我在get_context_data中使用bar_list與此保持一致。您需要通過{% for item in foo_list %}{% for item in bar_list %}

+0

通過OP邏輯可能是'context ['bar'] = self.get_queryset()。filter(Country = 64)'? –

+0

謝謝你的回答。但我沒有克服在我的模板中顯示foo,我不明白爲什麼? – Andro

+0

然後,您可能在模板中使用了錯誤的變量。當你在你的視圖和模板中使用了諸如'foo'和'bar'這樣的變量名時很難提供幫助。 – Alasdair

1

兩件事情改變模板循環:

1)get_queryset回報,那麼,一個QuerySet。你正在返回一個元組。 2)默認情況下,Listview將查詢集合傳遞給模板變量object_list

但是,您可以在模板中使用零覆蓋方法完成所有操作。

{% for item in object_list %} 
    {% if item.country == 64 %} 
    <tr> 
     <td>{{ item.id }}</td> 
    </tr> 
    {% endif %} 
{% endfor %} 

這將遍歷所有項目Foo,只打印那些有country == 64(如果這是一個外鍵,你需要以不同的方式構造查詢。)

如果由於某種原因,你必須做在這個視圖中,您需要調整get_querysetget_context以擁有兩個不同的對象列表。

相關問題