Django 提示:Object of type ‘QuerySet‘ is not JSON serializable

错误信息:

Traceback (most recent call last):
  File "C:\python3\lib\site-packages\django\core\handlers\exception.py", line 47, in inner
    response = get_response(request)
  File "C:\python3\lib\site-packages\django\core\handlers\base.py", line 181, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "F:\python_workspace\MyDjango\userSystem\views.py", line 12, in select
    return response_success(message='后台响应成功', data_list=books)
  File "F:\python_workspace\MyDjango\userSystem\views.py", line 20, in response_success
    'dataList': data_list#返回对象数组
  File "C:\python3\lib\json\__init__.py", line 231, in dumps
    return _default_encoder.encode(obj)
  File "C:\python3\lib\json\encoder.py", line 199, in encode
    chunks = self.iterencode(o, _one_shot=True)
  File "C:\python3\lib\json\encoder.py", line 257, in iterencode
    return _iterencode(o, 0)
  File "C:\python3\lib\json\encoder.py", line 179, in default
    raise TypeError(f'Object of type {o.__class__.__name__} '
TypeError: Object of type QuerySet is not JSON serializable

大致意思:查询对象集合没有进行JSON 序列化

解决办法:

1:引入django 序列化类

from django.core import serializers

2:将查询结果序列化,并输出

  return response_success(message='后台响应成功', data_list=serializers.serialize("json", books))

Python 完整代码:

import json
from django.shortcuts import render
from userSystem.models import Book
from django.http import HttpResponse
from django.core import serializers

# Create your views here.
def select(request):
    books = Book.objects.all()
    for i in range(len(books)):
        print("主键:%s   值:%s" % (i + 1, books[i]))

    return response_success(message='后台响应成功', data_list=serializers.serialize("json", books))


def response_success(message, data=None, data_list=[]):
    return HttpResponse(json.dumps({
        'code': 200,#code由前后端配合指定
        'message': message,#提示信息
        'data': data,#返回单个对象
        'dataList': data_list#返回对象数组
    }), 'application/json')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值