我在Py3上的Django项目1.10.1上有这个查询:
Event.objects.filter(Q(subject=topic.id) | Q(object=topic.id) | Q(place=topic.id))
如何防止获得两个相同的Event
记录?
提前谢谢。
答案 0 :(得分:4)
使用distinct运算符:
Event.objects.filter(Q(subject=topic.id) | Q(object=topic.id) | Q(place=topic.id)).distinct()
来自文档:
默认情况下,QuerySet不会消除重复的行。实际上,这很少是一个问题,因为像Blog.objects.all()这样的简单查询不会引入重复结果行的可能性。但是,如果您的查询跨越多个表,则在评估QuerySet时可能会获得重复的结果。那就是你使用distinct()。
在实施之前,请特别注意他们的“但是”条款,除非您希望实际看到重复的结果。
答案 1 :(得分:2)
我认为查询不能给出重复的结果。
我刚刚在类似的设置上尝试了类似的查询,它将转换为SQL查询,看起来大致如下:
SELECT *
FROM event
WHERE (subject=x OR object=x OR place=x)
这不会复制任何行,因此您实际上不需要做任何事情来避免重复记录。