2015-06-20 56 views
1

我使用Django 1.8和Python 3.4类型错误:对象不是JSON序列化在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'] = 'Script has not ran correctly' 
    return HttpResponse(JsonResponse(response_data), content_type="application/json") 

我试图从MySQL数据库中读取几排和HTML文件显示它,我面临以下错误消息,当上述观点正在跑

TypeError: YellowBased: YelloBased object is not JSON serializable 

在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

你检查了吗? http://stackoverflow.com/q/16790375/4724196 – HassenPy

+0

我已经查过了。在DJango 1.8中,Json库已被更改,我失去了一些东西:(..线路response_data ['message'] =列表(学生)似乎在视图中失败。我试图解决这个问题,但 – user3128771

+0

对不起,此行失败返回HttpResponse(JsonResponse(response_data),content_type =“application/json”) – user3128771

回答

5

您必须序列您student对象名单,尝试这样的事情:

from django.http import HttpRequest,HttpResponse 
from django.http import JsonResponse 
from json import dumps 
from django.core import serializers 


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'] = serializers.serialize('json', students) 
    except: 
     response_data['result'] = 'Ouch!' 
     response_data['message'] = 'Script has not ran correctly' 
    return HttpResponse(JsonResponse(response_data), content_type="application/json") 

请注意,在换线:
response_data['message'] = serializers.serialize('json', students)

检查文档的更多定制: https://docs.djangoproject.com/en/1.8/topics/serialization/

希望这有助于!

相关问题