我试图编写一个Django查询来查找一组包含某些子记录的父记录。问题是有两个子项匹配搜索的父记录将在结果中包含两次。在
我怎样才能让每个父母都有一次,即使它有多个匹配的孩子?在
下面我举了一个简单的例子来说明这个问题。Blog
是父级,Entry
是子级。当我搜索包含标题中带有“Hello”的条目的博客时,我得到了Jimmy博客的两个副本。在
以下是我创建的记录和我尝试的查询:
b = Blog(name="Jimmy's Jottings")
b.save()
Entry(blog=b, headline='Hello, World!').save()
Entry(blog=b, headline='Hello Kitty').save()
blog_count = Blog.objects.filter(entries__headline__contains='Hello').count()
assert blog_count == 1, blog_count
您可以看到只有一个blog,但是assert失败,计数为2。在
以下是完整的示例:
^{pr2}$
诀窍是使用一个子查询来查找匹配子项的blog id,然后搜索在该子查询中具有id的所有blog。然后子查询可以有重复项,而不会在主查询中造成重复。在
以下是固定查询:
以下是生成的SQL查询:
^{pr2}$虽然我相信Don Kirby的响应是有效的,但我认为更好的解决方案是在queryset的末尾添加.distinct()。这只是从查询结果中消除任何重复行。SQL的等效方法是对给定查询使用SELECT DISTINCT。在
相关问题 更多 >
编程相关推荐