django查询结果转json的几种方法


第一种:利用serializers转换

def json_test(request):

    data = {}

    book = Book.objects.all()

    data['list'] = json.loads(serializers.serialize("json", book))

    return JsonResponse(data)

 

得到的结果:

 

{

  "list": [

    {

      "pk": 3,

      "model": "myapp.book",

      "fields": {

        "book_name": "test",

        "add_time": "2017-09-15T00:48:45.123Z"

      }

    },

    {

      "pk": 14,

      "model": "myapp.book",

      "fields": {

        "book_name": "可以吗",

        "add_time": "2017-09-16T03:47:02.662Z"

      }

    },

    {

      "pk": 18,

      "model": "myapp.book",

      "fields": {

        "book_name": "dfs dsf ",

        "add_time": "2017-09-16T06:10:53.834Z"

      }

    },

    {

      "pk": 44,

      "model": "myapp.book",

      "fields": {

        "book_name": "122323",

        "add_time": "2017-09-25T07:15:56.058Z"

      }

    }

  ]

}

 

支持objects.all()的所有操作,如切片查询all()[:10]、链式过滤查询objects.all().filter(book_name=’test’)等价于objects.filter(book_name=’test’)等

 

支持objects.fifter()的所有操作

 

支持objects.values()的所有操作(但如果使用values的话,可以使用第二种方法转化json)

 

 

第二种 利用values+list转换

def json_test(request):

    data = {}

    book = Book.objects.values()

    data['list'] = list(book)

    return JsonResponse(data)

 

得到结果

 

{

  "list": [

    {

      "id": 3,

      "book_name": "test",

      "add_time": "2017-09-15T00:48:45.123Z"

    },

    {

      "id": 14,

      "book_name": "可以吗",

      "add_time": "2017-09-16T03:47:02.662Z"

    },

    {

      "id": 18,

      "book_name": "dfs dsf ",

      "add_time": "2017-09-16T06:10:53.834Z"

    },

    {

      "id": 44,

      "book_name": "122323",

      "add_time": "2017-09-25T07:15:56.058Z"

    }

  ]

}

 

这样的结果更简洁,也更适合使用。

 

同样支持链式条件过滤查询,如objects.values().filter(book_name=’test’)

 

支持切片查询,如objects.values()[:10]

 

支持字段过滤查询,如我只想查询id和book_name 这两个字段,只需这样写

 

book = Book.objects.values('id','book_name')

 

第三种 转换objects.get()获取的对象

利用一下方法:

 

dict([(kk,stu.__dict__[kk]) for kk in stu.__dict__.keys() if kk != "_state"])

 

例子

 

base_config = BaseConfig.objects.get(config_name=config_name)

response['data'] = object_to_json(base_config)

 

 

# objects.get()结果转换

def object_to_json(obj):

    return dict([(kk, obj.__dict__[kk]) for kk in obj.__dict__.keys() if kk != "_state"])

--------------------- 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM