使用自定义筛选器后端筛选Django rest framework查询集

2024-10-03 06:21:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我在筛选查询集时遇到问题。下面是一个简化的数据模型:

Entry
- id
- broadcast_groups

User
- id
- groups

所以可以在一个组中广播(共享)一个条目。我有一个返回entry对象的GET /entries/端点。在

我想过滤查询集以返回满足以下要求的条目:

  • 不在任何组中广播
  • 在用户所属的组中广播。在

我在绞尽脑汁怎么做到这一点。我想也许写一个定制的FilterBackend是个好主意。以下是我目前所掌握的情况:

^{pr2}$

然而,这并没有产生我期望的结果。实现这种过滤的filter()语法是什么?或者我从错误的角度来处理这个问题?在


Tags: 对象用户idget条目数据模型端点groups
1条回答
网友
1楼 · 发布于 2024-10-03 06:21:23

您正在查找Q对象https://docs.djangoproject.com/en/1.11/topics/db/queries/#complex-lookups-with-q-objects

class CanViewPublicOrGroupMemberEntriesFilterBackend(filters.BaseFilterBackend):
    def filter_queryset(self, request, queryset, view):
        user = request.user
        return queryset.filter(
            Q(broadcast_groups__in=user.groups.all()) |
            Q(broadcast_groups__isnull=True)
        )

相关问题 更多 >