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

时间:2009-12-30 12:15:04

标签: django filter duplicates

鉴于以下模型:

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 个答案:

答案 0 :(得分:18)

添加.distinct()只能获得截然不同的结果。

答案 1 :(得分:8)

请参阅QuerySet API Docs了解“distinct()”函数:

  

返回一个使用的新QuerySet   在其SQL查询中选择DISTINCT。这个   消除了重复的行   查询结果。

     

默认情况下,QuerySet不会   消除重复的行。在实践中,   这很少是一个问题,因为   简单的查询,如   Blog.objects.all()不介绍   重复结果行的可能性。   但是,如果您的查询跨越多个   表,可能会重复   评估QuerySet时的结果。   那就是你使用distinct()。