【问题标题】:Django - filtering related objects in "backward" relationshipsDjango - 在“向后”关系中过滤相关对象
【发布时间】:2012-05-16 06:15:14
【问题描述】:

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

我有两个模型:

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 的所有后向相关对象,这很好。

现在,如果我想从该查询中过滤一些结果怎么办?

我正在考虑在 View by 中进行迭代:

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

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

如何将它传递给模板并获得我之前得到的(未过滤的视图)但现在带有过滤结果的内容?

【问题讨论】:

  • 这感觉就像你在混合表示和业务逻辑。最好实现一个封装它的管理器。您还可以遍历 B 的查询集并按 A 中的某些条件对其进行过滤
  • 感谢您的回复,我会记住的:)

标签: django filter models relationship


【解决方案1】:

最好的方法是给你的模型添加一个方法。用一个真实世界的模型示例来说明会更容易,但要点是:

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 %}

【讨论】:

  • 很棒的答案!我从来没有想过这一点,我只是想出了一些奇怪的想法来解决这个问题:)
猜你喜欢
  • 2010-09-20
  • 2019-02-14
  • 1970-01-01
  • 2018-11-18
  • 2012-11-29
  • 1970-01-01
相关资源
最近更新 更多