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

标签 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>]

它返回同一张票 (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/

相关文章:

python - 如何在 python pandas 中使用 json_normalize 解压多个级别?

python - 在 python 中查找对称对

javascript - 如何使用 jQuery 在列表中选择正确的按钮?

Django序列化器属性错误: 'unicode' object has no attribute 'isoformat'

python - 复杂的 Django 查询

python - ABC 的计算成本

python - 如何使 Ruby 或 Python 网站使用多核?

python - 我在 python 中拆分字符串的方式有什么问题?

python - Django 如何按相关模型过滤和排序查询集

django - 使用 AWS S3 时,为什么 Django 不将 FileField 序列化为文件 url