Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django REST框架:从两个不同的URL使用相同的queryset_Django_Django Rest Framework - Fatal编程技术网

Django REST框架:从两个不同的URL使用相同的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

我有两个用于组和成员身份的模型视图集:

在MembershipViewSet中,get_queryset允许您的查询按组id进行筛选,以获取与特定组关联的成员

在GroupViewSet中,我还希望允许在URL/groups/{pk}/memberships处按组进行过滤:

但是,我不想通过复制MembershipsViewSet中的get_queryset代码而一败涂地。下面的代码是这样的,尽管它不起作用:

@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)