代码之家  ›  专栏  ›  技术社区  ›  knipknap

Django:过滤相关对象,从结果中删除重复项

  •  9
  • knipknap  · 技术社区  · 16 年前

    class Blog(models.Model):
        name = models.CharField()
    
    class Entry(models.Model):
        blog = models.ForeignKey(Blog)
        content = models.CharField()
    

    我希望将以下内容传递给模板:

    blogs  = Blog.objects.filter(entry__content__contains = 'foo')
    result = [(blog, blog.entry_set.filter(content__contains = 'foo'))
              for blog in blogs]
    render_to_response('my.tmpl', {'result': result}
    

    但是,如果找到多个匹配条目,“Blog.objects.filter(…)”会多次返回同一Blog对象。

    如何删除重复项?或者更好的是,我是否缺少一种更简单的方法将匹配列表传递给模板?

    2 回复  |  直到 16 年前
        1
  •  18
  •   Ignacio Vazquez-Abrams    16 年前

    添加 .distinct() 只会给你不同的结果。

        2
  •  8
  •   James Polley    16 年前

    QuerySet API Docs 对于“distinct()”函数:

    返回使用 在其SQL查询中选择DISTINCT。这 从中消除重复行 查询结果。

    默认情况下,查询集不会 消除重复行。实际上,, 这很少是个问题,因为 Blog.objects.all()不引入 重复结果行的可能性。 但是,如果您的查询跨越多个 表,有可能得到重复的 计算查询集时的结果。 此时您将使用distinct()。