0

私は「後方」の関係を持ついくつかのモデルに取り組んできました。私は疑問に思い始めました...いくつかの結果をフィルタリングしたい場合はどうなりますか?

私は2つのモデルを持っています:

Model A:
 name
 image
 date 

Model B:
 ForeignKey to Model A
 name
 date

モデルAIにアクセスするには、次を使用します。p = A.objects.all()。order_by('-date')

それをテンプレートに渡します。

テンプレートの場合:

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

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

  {% endfor %}
{% endfor %}

モデルAの後方関連オブジェクトをすべて取得しましたが、問題ありません。

そのクエリからの結果をフィルタリングしたい場合はどうすればよいですか?

私はビューでの反復を考えていました:

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

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

それをテンプレートに渡して、以前に取得したもの(フィルタリングされていないビュー)を取得しますが、現在はフィルタリングされた結果を取得するにはどうすればよいですか?

4

1 に答える 1

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 %}
于 2012-05-07T18:42:50.610 に答える