Django REST框架:从两个不同的URL使用相同的queryset
我有两个用于组和成员身份的模型视图集: 在MembershipViewSet中,get_queryset允许您的查询按组id进行筛选,以获取与特定组关联的成员 在GroupViewSet中,我还希望允许在URL/groups/{pk}/memberships处按组进行过滤: 但是,我不想通过复制MembershipsViewSet中的get_queryset代码而一败涂地。下面的代码是这样的,尽管它不起作用:Django REST框架:从两个不同的URL使用相同的queryset,django,django-rest-framework,Django,Django Rest Framework,我有两个用于组和成员身份的模型视图集: 在MembershipViewSet中,get_queryset允许您的查询按组id进行筛选,以获取与特定组关联的成员 在GroupViewSet中,我还希望允许在URL/groups/{pk}/memberships处按组进行过滤: 但是,我不想通过复制MembershipsViewSet中的get_queryset代码而一败涂地。下面的代码是这样的,尽管它不起作用: @link() def memberships(self, request, pk=N
@link()
def memberships(self, request, pk=None):
group = Group.objects.get(pk=pk)
# The following doesn't work because QUERY_PARAMS is immutable
self.request.QUERY_PARAMS.update({'group_id':pk})
mems = MembershipViewSet.get_queryset(self)
mems = MembershipSerializer(mems, many=true, context={'request': request})
return Response(mems.data)
因此,问题是:如何重定向或至少重新使用查询代码,以便从两个不同的DRF URL返回相同的结果?我不知道这是否解决了您的问题,但您可以替换这一行
# The following doesn't work because QUERY_PARAMS is immutable
self.request.QUERY_PARAMS.update({'group_id':pk})
与
然后在get_queryset中,您可以以相同的方式获取组id
group_id = self.kwargs.get('group_id', None)
这是我通常的做法,对我来说很有效。希望这有帮助
# The following doesn't work because QUERY_PARAMS is immutable
self.request.QUERY_PARAMS.update({'group_id':pk})
self.kwargs['group_id'] = pk
group_id = self.kwargs.get('group_id', None)