DRF中get_queryset如何筛选用户为所有者或在ManyToMany参与字段的项目
Django ViewSet get_queryset 方法修改方案
实现步骤
- 先在ViewSet所在文件的头部导入Django ORM的逻辑查询对象
Q - 调整普通用户的查询过滤规则,用
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
相关产品推荐
相关产品推荐

