Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.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
Python TypeError:类型为'的对象;JsonResponse';返回json值时没有len()_Python_Django_Django Rest Framework - Fatal编程技术网

Python TypeError:类型为'的对象;JsonResponse';返回json值时没有len()

Python TypeError:类型为'的对象;JsonResponse';返回json值时没有len(),python,django,django-rest-framework,Python,Django,Django Rest Framework,TypeError:JsonResponse类型的对象在返回json值时没有len()。但是print(dicts)和print(json.dumps(dicts))会显示值,但是当返回JsonResponse(json.dumps(dicts),safe=False)时会显示类似于“TypeError:JsonResponse类型的对象没有len()”的错误,如何解决此问题 错误 Views.py class UserNewsListingListViewSet(MobileNewsListV

TypeError:JsonResponse类型的对象在返回json值时没有len()。但是print(dicts)和print(json.dumps(dicts))会显示值,但是当返回JsonResponse(json.dumps(dicts),safe=False)时会显示类似于“TypeError:JsonResponse类型的对象没有len()”的错误,如何解决此问题

错误

Views.py

class UserNewsListingListViewSet(MobileNewsListViewSet):

def get_queryset(self):
    queryset = self.queryset.filter(publish=True)
    queryset = queryset.exclude(news_summary='')

    # Filter News Provider
    if self.request.GET.get('user_id'):
        queryset = queryset.filter(posted_by__id=self.request.GET.get('user_id'))

    # Filter News Category
    if self.request.GET.get('news_type'):
        queryset = queryset.filter(news_category__slug=self.request.GET.get('news_type'))
    dicts = []

    for query in queryset[:6]:
        id = query.id
        newstitle = query.news_title
        news_summary = query.news_summary
        slug = query.slug
        news_image = query.news_image
        news_provider = query.news_provider
        news_page_url = query.news_page_url
        newsdate = query.news_datetime
        likescount = query.likes_count
        mobile_news_summary = query.mobile_news_summary
        for cat in query.news_category.all():
            news_category = cat.news_category
        data = {
            "id":id,
            "newstitle":newstitle,
            "news_categories":news_category,
            "news_summary":news_summary,
            "slug":slug,
            "news_image":news_image,
            "news_provider":{
                "id":query.news_provider.id,
                "news_providers": query.news_provider.news_provider,
                "url":query.news_provider.url,
                "region":query.news_provider.region,
                "image":str(query.news_provider.image),
                "descriptions":query.news_provider.description,
                "followers":query.news_provider.followers,
                "slug":query.news_provider.slug,
                "created_time":query.news_provider.created_time,
                "publish":query.news_provider.publish


            },
            "news_page_url":news_page_url,
            "newsdate":newsdate,
            "likescount":likescount,
            "mobile_news_summary":mobile_news_summary
        }
        # dat=json.dumps(data)
        dicts.append(data)
     return JsonResponse(json.dumps(dicts), safe=False)
当返回dicts时,会显示如下错误:

Traceback (most recent call last):
File "C:\duklr\Duklr-web\venv\lib\site- 
packages\django\core\handlers\exception.py", line 41, in inner
response = get_response(request)
File "C:\duklr\Duklr-web\venv\lib\site- 
packages\django\core\handlers\base.py", line 187, in _get_response
response = self.process_exception_by_middleware(e, request)
File "C:\duklr\Duklr-web\venv\lib\site- 
packages\django\core\handlers\base.py", line 185, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\duklr\Duklr-web\venv\lib\site- 
packages\django\views\decorators\csrf.py", line 58, in wrapped_view
return view_func(*args, **kwargs)
File "C:\duklr\Duklr-web\venv\lib\site-packages\rest_framework\viewsets.py", 
line 116, in view
return self.dispatch(request, *args, **kwargs)
File "C:\duklr\Duklr-web\venv\lib\site-packages\rest_framework\views.py", 
line 495, in dispatch
response = self.handle_exception(exc)
File "C:\duklr\Duklr-web\venv\lib\site-packages\rest_framework\views.py", 
line 455, in handle_exception
self.raise_uncaught_exception(exc)
File "C:\duklr\Duklr-web\venv\lib\site-packages\rest_framework\views.py", 
line 492, in dispatch
response = handler(request, *args, **kwargs)
File "C:\duklr\Duklr-web\venv\lib\site-packages\rest_framework\mixins.py", 
line 45, in list
return self.get_paginated_response(serializer.data)
File "C:\duklr\Duklr-web\venv\lib\site- 
packages\rest_framework\serializers.py", line 768, in data
ret = super(ListSerializer, self).data
File "C:\duklr\Duklr-web\venv\lib\site- 
packages\rest_framework\serializers.py", line 262, in data
self._data = self.to_representation(self.instance)
File "C:\duklr\Duklr-web\venv\lib\site- 
packages\rest_framework\serializers.py", line 686, in to_representation
self.child.to_representation(item) for item in iterable
File "C:\duklr\Duklr-web\venv\lib\site- 
packages\rest_framework\serializers.py", line 530, in to_representation
ret[field.field_name] = field.to_representation(attribute)
File "C:\duklr\Duklr-web\venv\lib\site-packages\rest_framework\relations.py", 
line 542, in to_representation
for value in iterable
File "C:\duklr\Duklr-web\venv\lib\site-packages\rest_framework\relations.py", 
line 272, in to_representation
return value.pk
AttributeError: 'unicode' object has no attribute 'pk'
[02/Mar/2020 12:37:15] "GET /api/v2/usernewslist/ HTTP/1.1" 500 20224
当代码更改时

class UserNewsListingListViewSet(MobileNewsListViewSet):

def get_queryset(self):
    queryset = self.queryset.filter(publish=True)
    queryset = queryset.exclude(news_summary='')

    # Filter News Provider
    if self.request.GET.get('user_id'):
        queryset = queryset.filter(posted_by__id=self.request.GET.get('user_id'))

    # Filter News Category
    if self.request.GET.get('news_type'):
        queryset = queryset.filter(news_category__slug=self.request.GET.get('news_type'))


    dicts = []

    for query in queryset[:6]:
        id = query.id
        newstitle = query.news_title
        news_summary = query.news_summary
        slug = query.slug
        news_image = query.news_image
        news_provider = query.news_provider
        news_page_url = query.news_page_url
        newsdate = query.news_datetime
        likescount = query.likes_count
        mobile_news_summary = query.mobile_news_summary
        for cat in query.news_category.all():
            news_category = cat.id

        data = {

            "id":str(id),
            "newstitle":str(newstitle),
            "news_category":str(news_category),
            "news_summary":str(news_summary),
            "slug":str(slug),
            "news_image":str(news_image),
            "news_provider":{

                "id":str(query.news_provider.id),
                "news_providers": str(query.news_provider.news_provider),
                "url":str(query.news_provider.url),
                "region":str(query.news_provider.region),
                "image":str(query.news_provider.image),
                "descriptions":str(query.news_provider.description),
                "followers":str(query.news_provider.followers),
                "slug":str(query.news_provider.slug),
                "created_time":str(query.news_provider.created_time),
                "publish":str(query.news_provider.publish)

            },
            "news_page_url":str(news_page_url),
            "newsdate":str(newsdate),
            "likescount":str(likescount),
            "mobile_news_summary":str(mobile_news_summary)
        }

        dat = json.dumps(data)
        dicts.append(dat)

     return dicts
它显示了这样一个错误, 回溯:

Traceback (most recent call last):
File "/home/test/.local/lib/python2.7/site- 
 packages/django/core/handlers/exception.py", line 41, in inner
response = get_response(request)
File "/home/test/.local/lib/python2.7/site- 
packages/django/core/handlers/base.py", line 187, in _get_response
response = self.process_exception_by_middleware(e, request)
 File "/home/test/.local/lib/python2.7/site- 
packages/django/core/handlers/base.py", line 185, in _get_response
response = wrapped_callback(request, *callback_args, 
**callback_kwargs)
File "/home/test/.local/lib/python2.7/site- 
packages/django/views/decorators/csrf.py", line 58, in wrapped_view
return view_func(*args, **kwargs)
File "/home/test/.local/lib/python2.7/site- 
packages/rest_framework/viewsets.py", line 116, in view
return self.dispatch(request, *args, **kwargs)
 File "/home/test/.local/lib/python2.7/site- 
packages/rest_framework/views.py", line 495, in dispatch
response = self.handle_exception(exc)
 File "/home/test/.local/lib/python2.7/site- 
packages/rest_framework/views.py", line 455, in handle_exception
self.raise_uncaught_exception(exc)
 File "/home/test/.local/lib/python2.7/site- 
packages/rest_framework/views.py", line 492, in dispatch
response = handler(request, *args, **kwargs)
 File "/home/test/.local/lib/python2.7/site- 
packages/rest_framework/mixins.py", line 45, in list
return self.get_paginated_response(serializer.data)
File "/home/test/.local/lib/python2.7/site- 
packages/rest_framework/serializers.py", line 768, in data
ret = super(ListSerializer, self).data
file "/home/test/.local/lib/python2.7/site- 
packages/rest_framework/serializers.py", line 262, in data
self._data = self.to_representation(self.instance)
File "/home/test/.local/lib/python2.7/site- 
packages/rest_framework/serializers.py", line 686, in 
to_representation
self.child.to_representation(item) for item in iterable
File "/home/test/.local/lib/python2.7/site- 
packages/rest_framework/serializers.py", line 517, in 
to_representation
attribute = field.get_attribute(instance)
File "/home/test/.local/lib/python2.7/site- 
packages/rest_framework/relations.py", line 536, in get_attribute
relationship = get_attribute(instance, self.source_attrs)
File "/home/test/.local/lib/python2.7/site- 
packages/rest_framework/fields.py", line 101, in get_attribute
instance = getattr(instance, attr)
AttributeError: 'str' object has no attribute 'news_category'

JsonResponse的第一个参数采用dict。您正在传入json.dumps,它将返回一个与
dicts
列表对应的转换字符串。使用类似

JsonResponse({'data':dicts},safe=False)

如果代码的缩进没有错误,则表明存在逻辑错误。在查询中cat的第二个for循环中,news\u category.all()更改news\u category变量,但它不会插入任何位置。

您需要将Python列表/字典传递给
JsonResponse
,而不是字符串。i、 例如,直接将
dicts
作为第一个参数传递,而不是将其包装在
json.dumps
中。
JsonResponse
的目的是为您进行序列化。您的代码中还存在其他问题,例如,
数据
数据
的混合使用。我猜这是您在此处发布的内容而不是实际代码中的错误,因为您发布的内容甚至在返回响应之前都会失败。它还返回相同的问题,如TypeError:“JsonResponse”类型的对象没有len()您能提供完整的错误输出和回溯吗?我看到您正在使用django paginator。如果不看完整的代码,我会猜测get_queryset方法将需要返回一个Iterable(如list或tuple),paginator将进一步处理该Iterable。看起来您只需要从该函数返回
dicts
列表当我返回dicts时,其显示的错误如下instance=instance[attr]keyror:u'news\u category根据您的代码,您有一个名为
news\u categories
的键。您可以使用
instance.keys()
Traceback (most recent call last):
File "/home/test/.local/lib/python2.7/site- 
 packages/django/core/handlers/exception.py", line 41, in inner
response = get_response(request)
File "/home/test/.local/lib/python2.7/site- 
packages/django/core/handlers/base.py", line 187, in _get_response
response = self.process_exception_by_middleware(e, request)
 File "/home/test/.local/lib/python2.7/site- 
packages/django/core/handlers/base.py", line 185, in _get_response
response = wrapped_callback(request, *callback_args, 
**callback_kwargs)
File "/home/test/.local/lib/python2.7/site- 
packages/django/views/decorators/csrf.py", line 58, in wrapped_view
return view_func(*args, **kwargs)
File "/home/test/.local/lib/python2.7/site- 
packages/rest_framework/viewsets.py", line 116, in view
return self.dispatch(request, *args, **kwargs)
 File "/home/test/.local/lib/python2.7/site- 
packages/rest_framework/views.py", line 495, in dispatch
response = self.handle_exception(exc)
 File "/home/test/.local/lib/python2.7/site- 
packages/rest_framework/views.py", line 455, in handle_exception
self.raise_uncaught_exception(exc)
 File "/home/test/.local/lib/python2.7/site- 
packages/rest_framework/views.py", line 492, in dispatch
response = handler(request, *args, **kwargs)
 File "/home/test/.local/lib/python2.7/site- 
packages/rest_framework/mixins.py", line 45, in list
return self.get_paginated_response(serializer.data)
File "/home/test/.local/lib/python2.7/site- 
packages/rest_framework/serializers.py", line 768, in data
ret = super(ListSerializer, self).data
file "/home/test/.local/lib/python2.7/site- 
packages/rest_framework/serializers.py", line 262, in data
self._data = self.to_representation(self.instance)
File "/home/test/.local/lib/python2.7/site- 
packages/rest_framework/serializers.py", line 686, in 
to_representation
self.child.to_representation(item) for item in iterable
File "/home/test/.local/lib/python2.7/site- 
packages/rest_framework/serializers.py", line 517, in 
to_representation
attribute = field.get_attribute(instance)
File "/home/test/.local/lib/python2.7/site- 
packages/rest_framework/relations.py", line 536, in get_attribute
relationship = get_attribute(instance, self.source_attrs)
File "/home/test/.local/lib/python2.7/site- 
packages/rest_framework/fields.py", line 101, in get_attribute
instance = getattr(instance, attr)
AttributeError: 'str' object has no attribute 'news_category'