首页 > 解决方案 > 如何在 drf modelviewset 中获取字符串参数

问题描述

我需要使用带有可选参数的路径,通过 srting 指定用户,对于所有用户,请求看起来像 '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'] 返回 KeyError username=self.request.GET.get('username') 返回无

标签: python-3.xdjangodjango-rest-frameworkdjango-views

解决方案


我已经设法通过这样做来实现这一点:所以对于看起来像这样的请求:

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)

推荐阅读