在Django 1.8 Python 3.4中出现TypeError: object is not JSON serializable错误。

16 浏览
0 Comments

在Django 1.8 Python 3.4中出现TypeError: object is not JSON serializable错误。

我正在使用Django 1.8和Python 3.4。

当运行以下视图时,Django会抛出类型错误-对象不可JSON序列化。

Views.py

from django.http import HttpRequest,HttpResponse
from django.http import JsonResponse
from json import dumps
def get_stats(request):
    if request.method == "POST":
        srch_dropV = request.POST['srch_dropAJ']
    else:
        srch_dropV = ''
    if(srch_dropV == 'Green'):
        students = GreenBased.objects.all()
    if(srch_dropV == 'Yellow'):
        students = YellowBased.objects.all()
    response_data = {}
    try:
        response_data['result'] = 'Success'
        response_data['message'] = list(students)
    except:
        response_data['result'] = 'Ouch!'
        response_data['message'] = '脚本未正确运行'
    return HttpResponse(JsonResponse(response_data), content_type="application/json")

我尝试从MySQL数据库中读取几行并在HTML文件中显示它,但当上述视图运行时,我遇到以下错误消息:

TypeError: YellowBased: YelloBased对象不可JSON序列化

在HTML页面中,我有一个下拉列表..根据所选的选项,我的Ajax将返回从MySQL表获取的记录。

Models.py

class GreenBased(models.Model):
    NumOfStudents = models.CharField(max_length=300,blank=True)
    Green = models.CharField(max_length=300,blank=True)
    class Meta:
        managed = False
        db_table = "GreenStats"
class YelloBased(models.Model):
    NumOfStudents = models.CharField(max_length=300,blank=True)
    Yellow = models.CharField(max_length=300,blank=True)
    class Meta:
        managed = False
        db_table = "YellowStats"

GreenStats和YellowStats表在MySQL中只包含2 * 2行。

有人可以帮我找出这个问题吗?

0
0 Comments

问题的原因是在Django 1.8和Python 3.4环境下,无法将对象直接序列化为JSON格式。解决方法是使用Django的序列化器将对象列表序列化为JSON格式。

在给定的代码中,通过导入相关模块并使用序列化器将学生对象列表序列化为JSON格式。在try块中,将序列化后的结果赋值给response_data字典的'message'键。如果序列化过程出现异常,将异常信息赋值给'result'键和'message'键。

最后,通过JsonResponse函数将response_data字典返回为JSON格式的HTTP响应。

需要注意的是,代码中的一行有所修改:response_data['message'] = serializers.serialize('json', students)

此外,可以通过查看Django文档来了解更多自定义序列化的方式。希望这对你有所帮助!

参考链接:https://docs.djangoproject.com/en/1.8/topics/serialization/

0