2012-05-07 97 views
0

我一直在研究一些具有「落後」關係的模型。我開始懷疑......如果我想過濾一些結果呢?Django - 在「落後」關係中過濾相關對象

我有兩個型號:

Model A: 
name 
image 
date 

Model B: 
ForeignKey to Model A 
name 
date 

要訪問模型AI使用: P = A.objects.all()ORDER_BY( ' - 日期')

,我傳遞。模板。

模板:

{% for n in model_a.all %} 
    {% for item in n.modelb_set.all %} 

    <li>{{item.name}}</li> 

    {% endfor %} 
{% endfor %} 

我得到了模型中的所有相關落後對象和多數民衆贊成罰款。

現在如果我想過濾來自該查詢的一些結果呢?

p = A.objects.all().order_by('-date') 

for n in p: 
    for x in n.modelb_set.filter(date_lte=""): 
    ls = [] 
    ls.append[x] 

如何傳遞給模板,讓我得到了什麼早期(未過濾視圖),但現在用過濾後的結果:

我在一個視圖通過思考迭代?

+1

這感覺就像是你混合表示和業務邏輯。這可能是最好的實現一個封裝的管理器。你也可以迭代B的查詢集並按照一些條件對它進行過濾A – tback

+0

感謝您的回覆我會記得:) – Efrin

回答

5

最好的方法是在模型中添加一個方法。這將是更容易與現實世界模型的例子來說明,但要點是:

class ModelA: 
    ... 
    def filtered_modelb_set(self): 
     return self.modelb_set.filter(...) 
    ... 

然後,在你的模板,你只需調用該方法代替:

{% for n in model_a.all %} 
    {% for item in n.filtered_modelb_set %} 

    <li>{{item.name}}</li> 

    {% endfor %} 
{% endfor %} 
+0

偉大的anwser!我從來沒有想到這一點,我只是想出了這個問題的奇怪想法:) – Efrin