Django model与json

最近两天一直在做如何从model中获取数据库中的数据,然后把数据变成json数据传给前台。

from roomhourse.models import v_xs

student = v_xs.object.all()

#

return HttpResponse(student)

结果不出意外的出错了,传的不是json,而是QuerySet(查询集),

后来用了

import json

student = json.dumps(student,ensure_ascii=False)

return HttpResponse(student)

后来就开始报xxx  is not JSON serializable之类的问题,这个主要原因还是因为你查询的model里面可能有外键的原因,在你查询后,外键也在其中,但是外键其实也是一个查询集,最简单的方法就是外键不要传给前端,不过还是可以有更高端的方法,如下:

自己创建一个类,继承json,来添加自定义类的处理方法

class JsonXS(json.JSONENcoder):

    def default(self, obj):        

            if isinstance(obj,v_xs):

                    return  obj.__str__()

            return json.JSONEncoder.default(self, obj)

student = json.dumps(student, cls= JsonXS, ensure_ascii=False)

待定

或者用自定义转json的方法

在models中:

def  JsonXS(self):

        return {....'roomxs':self.roomxs,...}

在view中:

def  toDicts(objs):

        json_str = []

        for o in objs:

                json_str.append(o.JsonXS())

        return json_str

已测,可以执行

或者直接导入了serializers

from django.core import serializers

studentman = serializers.serialize("json",studentman)

return HttpResponse(studentmanage)

已测,可以执行

以上三个方法应该都是可以传json值的,我只测试了两种方法,第一种没有测试

*************************************************************************************************************************************************

其实python中json就有自带的方法,json.dumps()

dumps是将dict转化成str格式,loads是将str转化成dict格式

参看连接:Django model,QuerySet 序列化成json的方法 - CSDN博客

                  [Python]json 错误xx is not JSON serializable - CSDN博客

                  Django发送Json格式数据 - CSDN博客

你可能感兴趣的:(Django model与json)