You need to enable JavaScript to run this app. DRF中get_queryset如何筛选用户为所有者或在ManyToMany参与字段的项目
优惠活动
大模型
产品
解决方案
定价
更多

DRF中get_queryset如何筛选用户为所有者或在ManyToMany参与字段的项目

Django ViewSet get_queryset 方法修改方案

实现步骤

  1. 先在ViewSet所在文件的头部导入Django ORM的逻辑查询对象Q
  2. 调整普通用户的查询过滤规则,用Q组合「所有者为当前用户」和「参与者包含当前用户」两个或条件,同时添加distinct()去重,避免同一用户同时为所有者和参与者时返回重复项目

修改后的完整代码

# 顶部新增导入
from django.db.models import Q

# 原get_queryset方法修改后如下
def get_queryset(self):
    if self.request.user.is_superuser:
        return Project.objects.all()
    else:
        return Project.objects.filter(
            Q(owner=self.request.user) | Q(participants=self.request.user)
        ).distinct()

逻辑说明

  • Q(owner=self.request.user) 匹配当前用户为所有者的项目,和原有逻辑一致
  • Q(participants=self.request.user) 匹配当前用户在参与者列表中的项目,Django ORM会自动处理多对多关联表的关联查询
  • | 为或逻辑运算符,两个条件满足其一即可命中
  • distinct() 用于结果去重,避免同一用户同时符合两个条件时返回重复的项目实例

内容的提问来源于stack exchange,提问作者dabljues

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.18 16:06:04