【问题标题】:how to get a string parametr in drf modelviewset如何在 drf modelviewset 中获取字符串参数
【发布时间】:2021-02-07 20:08:40
【问题描述】:

我需要使用带有可选参数的路径,以通过 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.x django django-rest-framework django-views


【解决方案1】:

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

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)

【讨论】:

    猜你喜欢
    • 2021-03-27
    • 1970-01-01
    • 2020-08-14
    • 2018-02-13
    • 2012-07-13
    • 1970-01-01
    • 2022-06-24
    • 1970-01-01
    • 2011-05-08
    相关资源
    最近更新 更多