在queryset django REST框架上返回NoneType

Posted

技术标签:

【中文标题】在queryset django REST框架上返回NoneType【英文标题】:Return NoneType on queryset django REST framework 【发布时间】:2018-06-30 01:56:36 【问题描述】:

问题:

我收到这样的错误:

追溯:

文件 “/usr/local/lib/python2.7/dist-packages/django/core/handlers/exception.py” 在内部 41. response = get_response(request)

文件 “/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py” 在 _get_response 187. response = self.process_exception_by_middleware(e, request)

文件 “/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py” 在 _get_response 185. response = Wrapped_callback(request, *callback_args, **callback_kwargs)

文件 “/usr/local/lib/python2.7/dist-packages/django/views/decorators/csrf.py” 在wrapped_view 58. return view_func(*args, **kwargs)

文件 “/usr/local/lib/python2.7/dist-packages/rest_framework/viewsets.py”在 看法 87. return self.dispatch(request, *args, **kwargs)

文件“/usr/local/lib/python2.7/dist-packages/rest_framework/views.py” 在调度中 474. 响应 = self.handle_exception(exc)

文件“/usr/local/lib/python2.7/dist-packages/rest_framework/views.py” 在句柄异常中 434. self.raise_uncaught_exception(exc)

文件“/usr/local/lib/python2.7/dist-packages/rest_framework/views.py” 在调度中 471. 响应 = 处理程序(请求,*args,**kwargs)

文件“/usr/local/lib/python2.7/dist-packages/rest_framework/mixins.py” 在列表中 42. page = self.paginate_queryset(queryset)

文件 “/usr/local/lib/python2.7/dist-packages/rest_framework/generics.py”在 paginate_queryset 172. return self.paginator.paginate_queryset(queryset, self.request, view=self)

文件 “/usr/local/lib/python2.7/dist-packages/rest_framework/pagination.py” 在 paginate_queryset 311. self.count = _get_count(queryset)

文件 “/usr/local/lib/python2.7/dist-packages/rest_framework/pagination.py” 在 _get_count 54.返回len(查询集)

异常类型:/api/userprofiles/ 处的 TypeError 异常值: “NoneType”类型的对象没有 len()

我想做什么:

我只是希望人们在连接到 api 时获得自己的个人资料,因此我认为使用 UserProfile.objects.get(user=request.user) 而不是应用 UserProfile.objects.all 会更好。

但是正如您所看到的,它不起作用,可能是因为pagination 有一些问题,因为它试图获取len(),但它得到的对象是NoneType,尽管我打印了 queryset 只是在它被获取之后以确定它是否真的是 NoneType ,但它不是。

这是我的 UserProfileViewSet

class UserProfileViewSet(viewsets.ModelViewSet):
    """
    This viewset automatically provides `list`, `create`, `retrieve`,
    `update` and `destroy` actions.
    """
    # queryset = UserProfile.objects.all(user=request.user)
    serializer_class = UserProfileSerializer
    permission_classes = (permissions.IsAuthenticatedOrReadOnly,
                          IsOwnerOrReadOnly,)
    pagination_class = LimitTenPagination

    def get_queryset(self):
        try:
            queryset = self.request.user.profile.all() # UserProfile.objects.get(user=self.request.user)
            print queryset
        except:
            queryset = None
        return queryset   # UserProfile.objects.get(user=self.request.user)

    @detail_route(renderer_classes=[renderers.JSONRenderer])
    def perform_create(self, serializer):
        serializer.save(user=self.request.user)

【问题讨论】:

【参考方案1】:

回答(几乎立刻就知道了)

好吧,当我使用 UserProfile.objects.get(user=self.request.user) 时,我得到了一个 object ,而我需要的是一个 queryset

因此将查询集更改为queryset = UserProfile.objects.filter(user=self.request.user)

【讨论】:

以上是关于在queryset django REST框架上返回NoneType的主要内容,如果未能解决你的问题,请参考以下文章

在Django rest框架中获取图像文件和字段

django rest框架中的异步

如何覆盖 RetrieveAPIView 响应 django rest 框架

QuerySet 对象在 Django Rest Framework 上没有属性“用户”

Django REST 框架 http 404 详细信息”:“未找到。”

如何从序列化器字段订购 django rest 框架查询集?