美文网首页
Models查询 :QuerrySet格式化成json,存在外键

Models查询 :QuerrySet格式化成json,存在外键

作者: 好遠 | 来源:发表于2019-03-02 13:36 被阅读0次

方法一:

django.core中的serializers
使用

import django.core中的serializers,
data = serializers.serialize('json',data)

缺点:对外键支持很差,无法查询到外键数据

方法二:

QuerrySet的value方法
使用:
先使用value将QuerrySet转化成ValueSet,可以指定字段(包括外键的字段)。再利用list将ValueSet转化为list,最后通过json.dumps()转化为json。

A = models.objects.all()
data  =A.value('name', 'foreignkey__name')
data = json.dumps(list(data))

缺点:

在字段含有datetime格式时,默认的处理函数无法将datetime格式化,进而报错。

解决

支持外键格式化,并且字段中含有datetime格式数据:
类似方法二,只是json.dumps()函数自定义JsonEncoder
过程:

class DateJSONEncoder(json.JSONEncoder):
    def default(self, o):
        if isinstance(o, datetime.datetime):
            return o.strftime("%Y-%m-%d %H-%M")
        if isinstance(o, datetime.date):
            return o.strftime("%Y-%m-%d")
        else:
            return json.JSONEncoder.default(self, o)

A = models.objects.all()
data  =A.value('name', 'foreignkey__name')
data = json.dumps(list(data), cls=DateJSONEncoder)

参考:
python JSONencoder
关于在Django中Json无法序列化datetime的解决办法

相关文章

  • Models查询 :QuerrySet格式化成json,存在外键

    方法一: django.core中的serializers使用 缺点:对外键支持很差,无法查询到外键数据 方法二:...

  • Python对json的读写

    读写json代码 函数说明 dumps是将dict转化成json格式,loads是将json转化成dict格式du...

  • json.dumps() json.dump()的区别

    json.loads()是将str转化成dict格式,json.dumps()是将dict转化成str格式。jso...

  • 2018-01-22

    django转json格式: models表下面加: def toJSON(self): return jso...

  • Json & Gson

    1 Json 定义:轻量级的数据交换格式2 json反序列化成bean,bean序列化成json,都是通Json解...

  • 传给后台json

    后台要的格式 我先保存为字典 然后转化成json picIdStr是我之前存“1,2,3”的字符串

  • 2.json

    1.定义 2.json的格式 : 键值对的方式展示 (键:值,键:值) 3.一维json (如何访问一维json)...

  • Django前后端分离开发-新闻管理系统(二)

    一、Models数据结构 二、创建模型 models.py 按住Ctrl+Alt+l 快捷键可以将代码格式化 二...

  • 1.1 django model的增删改(1)

    数据库查询代码 引入指定model文件1 from .models import UserMessage2 定义存...

  • MYSQL中常用的json函数

    比如extra字段格式化如下,下面有的例子会用到该Json 查询json中的某个字段 假如查询extra_json...

网友评论

      本文标题:Models查询 :QuerrySet格式化成json,存在外键

      本文链接:https://www.haomeiwen.com/subject/vgueuqtx.html