如何在DRF modelviewset中获取字符串参数



我需要使用带有可选参数的路径,通过字符串指定用户,请求看起来像'api/users/specific_username'或'api/users'对于所有用户

网址:

router = DefaultRouter()
router.register(r'users', MyUserViewSet, basename='user-me')

视图:

class UserViewSet(viewsets.ModelViewSet):
serializer_class = UserSerializer
def get_queryset(self):
queryset = User.objects.all()
if self.kwargs['username']:
username=self.request.GET.get('username')
queryset = User.objects.filter(username=username)
return queryset

username=self.kwargs['username']返回KeyErrorusername=self.request.GET.get('username')返回所有

我已经做到了这样做:对于像这样的请求:

http://example.com/api/viewset?username=denvercoder9

代码是这样的:

def get_queryset(self):
"""
Optionally restricts the returned purchases to a given user,
by filtering against a `username` query parameter in the URL.
"""
queryset = Purchase.objects.all()
username = self.request.query_params.get('username', None)
if username is not None:
queryset = queryset.filter(purchaser__username=username)
return queryset

或者如果你真的想重写检索:(还没有测试过这段代码)

def retrieve(self, request, pk=None):
queryset = User.objects.filter(username=pk)
contact = get_object_or_404(queryset, pk=1)
serializer = ContactSerializer(contact)
return Response(serializer.data)

最新更新