2012-05-07 12 views
0

「後方」関係を持ついくつかのモデルで作業しています。私は不思議に思っていました...いくつかの結果をフィルタリングしたいのですが?Django - 関連するオブジェクトを「後方」関係でフィルタリングする

私が持っている二つのモデル: P = A.objects.all()ORDER_BY( ' - 日')

をし、私はことを渡す:

Model A: 
name 
image 
date 

Model B: 
ForeignKey to Model A 
name 
date 

がモデルAIの使用にアクセスします。テンプレートに。テンプレートで

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

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

    {% endfor %} 
{% endfor %} 

私はモデルAのためのすべての後方関連オブジェクトを取得し、罰金のthats。

ここで、そのクエリからいくつかの結果をフィルタリングしたいのですが?私はビューで反復を考えていた

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

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

次に、あなたのテンプレートで、あなただけではなく、そのメソッドを呼び出します表現とビジネスロジックを混在させます。おそらく、それをカプセル化するマネージャを実装するのが最善でしょう。また、Bのクエリーセットを反復し、Aの一部の基準でフィルタリングすることもできます。 – tback

+0

応答ありがとうございます。私は覚えています:) – Efrin

答えて

5

最もよい方法は、モデルにメソッドを追加することです。現実世界のモデルの一例を説明するために容易になるだろうが、要旨は次のようになります。これは、あなたがしているように感じ

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

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

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

素晴らしいアンカー!私はそれを考えなかったし、その問題の奇妙なアイデアを思いついた:) – Efrin

関連する問題