0

我一直在研究一些具有“后向”关系的模型。我开始想……如果我想过滤一些结果怎么办?

我有两个模型:

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 回答