我的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对象会返回多个结果?
答案 0 :(得分:1)
这会过滤到SQL:构建查询的方式可能导致同一行满足多个条件或多次满足相同条件。
如果这是格式化查询的最佳方式,请尝试添加.distinct()
以避免重复结果。
答案 1 :(得分:1)
确实,SQL的工作方式,意味着您有1张票,但是与该票相关的4 message_type
或4 reference
个对象,所以当您JOIN
时,所有这些将被退回。
使用.distinct()
可以解决您的问题。