2012-05-07 142 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