我在过滤查询集时遇到问题。这是一个简化的数据模型:
Entry
- id
- broadcast_groups
User
- id
- groups
因此,可以在组中广播(共享)条目。我有一个返回条目对象的GET /entries/
端点。
我想过滤查询集以返回满足以下要求的条目:
我在摸不着头脑如何实现这一目标。我想也许写一个自定义FilterBackend
是个好主意。以下是我到目前为止的情况:
class CanViewPublicOrGroupMemberEntriesFilterBackend(filters.BaseFilterBackend):
def filter_queryset(self, request, queryset, view):
user = request.user
return queryset.filter(broadcast_groups__in=user.groups.all())
然而,这并没有产生我期待的结果。实现此类过滤的filter()
语法是什么?或者我可能是从错误的一方接近问题?
答案 0 :(得分:1)
您正在寻找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)
)