我有一个 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>]
它返回同一张票 (id = 24) 四次。对于来自客户端的“GET”请求,我收到 MultipleObjectsReturned
异常:
get() returned more than one Ticket -- it returned 4!
为什么Q对象返回多个结果?
最佳答案
事实上,SQL 的工作方式意味着您有 1 个票证,但是 4 个 message_type
或 4 个 reference
对象与该票证相关,因此当您 JOIN
,全部返回。
使用 .distinct()
应该可以解决您的问题。
关于python - 为什么 Q 对象返回重复的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35823197/