为什么Q对象返回重复的结果?

时间:2016-03-06 04:41:26

标签: python django

我的ViewSet有一个get_queryset方法。此方法使用Q对象过滤对象:

def get_queryset(self):
    request = self.request
    query = Ticket.objects.filter(
                            Q(message_type__users__in=[request.user])|
                            Q(reference__to_user=request.user)
                            )
    return query

输出:

[<Ticket: 24>, <Ticket: 24>, <Ticket: 24>, <Ticket: 24>]

它返回相同的Ticket(id = 24)四次。对于&#39; GET&#39;来自客户的请求,我得到MultipleObjectsReturned例外:

get() returned more than one Ticket -- it returned 4!

为什么Q对象会返回多个结果?

2 个答案:

答案 0 :(得分:1)

这会过滤到SQL:构建查询的方式可能导致同一行满足多个条件或多次满足相同条件。

如果这是格式化查询的最佳方式,请尝试添加.distinct()以避免重复结果。

答案 1 :(得分:1)

确实,SQL的工作方式,意味着您有1张票,但是与该票相关的4 message_type或4 reference个对象,所以当您JOIN时,所有这些将被退回。

使用.distinct()可以解决您的问题。