Django - 在“后向”关系中过滤相关对象

时间:2012-05-07 18:28:57

标签: django filter models relationship

我一直在研究一些“落后”关系的模特。我开始想知道......如果我想过滤一些结果怎么办?

我有两个型号:

Model A:
 name
 image
 date 

Model B:
 ForeignKey to Model A
 name
 date

要访问模型A我使用:     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]

如何将其传递给模板并获取我之前获得的内容(未过滤的视图),但现在已经过滤了结果?

1 个答案:

答案 0 :(得分: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 %}