首页 > 其他分享 >Django ORM QuerySet转json

Django ORM QuerySet转json

时间:2022-10-15 20:13:03浏览次数:45  
标签:code name objects models QuerySet Component json ORM

下面是Django中两种常用的ORM查询
models.Component.objects.filter(...).all()

models.Component.objects.values(...)

第一种我们可以使用serializers.serialize("json", c)方法来转json格式字符串
c = models.Component.objects.filter(id=1).all()
components = serializers.serialize("json", c)
data = json.dumps({"value": components})
print(data)


就成功的转成如下json数据了

{"value": "[
{\"model\": \"Storage.component\",
\"pk\": 1,
\"fields\": {
\"name\": \"\u5e95\u5ea7\",
\"code\": \"1-10\",
\"type\": 0,
\"important\": 0,
\"product\": 1,
\"num\": 12,
\"storage\": null,
\"location\": null,
\"remark\": \"\"}
},
{\"model\": \"Storage.component\",
\"pk\": 2,
\"fields\": {
\"name\": \"\u51f8\u900f\u955c\",
\"code\": \"1-20\",
\"type\": 1,
\"important\": 1,
\"product\": 1,
\"num\": 3,
\"storage\": null,
\"location\": null,
\"remark\": \"\"}}
]"}

虽然看起来有点难受,但至少能用,像我这种强迫症直接就放弃了。。。

第二种如果还是使用serializers.serialize("json", c)方法来转json你就会发现直接报错了
c = models.Component.objects.filter(id=1).values("name", "code")
components = serializers.serialize("json", c)
# 这里就直接报错了
# AttributeError: 'dict' object has no attribute '_meta'

所以只能换种方法

c = models.Component.objects.filter(id=1).values("name", "code")
print(c)
# <QuerySet [{'name': '底座', 'code': '1-10'}, {'name': '凸透镜', 'code': '1-20'}]>
当我们打印出来看的时候会发现这QuerySet其实里面就是放了两个字典,那就正好一个天然json块,那就直接拿出来就好了

l = []
for a in c:
l.append(a)
js = json.dumps({"value": l}, ensure_ascii=False)
print(js)
# {"value": [{"name": "底座", "code": "1-10"}, {"name": "凸透镜", "code": "1-20"}]}

当然还可以把它做成通用方法

def dictFetchOrm(para):
resDic=[]
for i in para:
resDic.append(i)
return json.dumps(resDic, ensure_ascii=False)
————————————————
版权声明:本文为CSDN博主「simple-soul」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/UmGsoil/article/details/123924654

标签:code,name,objects,models,QuerySet,Component,json,ORM
From: https://www.cnblogs.com/hongdoudou/p/16794926.html

相关文章

  • WinForm中Scale使用初步理解
      ClientSize=newSize(102,126);此客户区域的尺寸与上面的newCalcButton(this,"+",'+',62,24,14,14)等各构造函数的定位尺寸是一套体系;而Scale(Font.Height/9f);是......
  • 网络通信——HTTP接口访问——移动数据格式JSON
        网络通信的交互数据格式有两大类,分别是JSON和XML。对于App来说,基本采用JSON格式与服务器通信。JSON相比XML的优势主要有两个:(1)手机流量很贵,表达同样的信息,J......
  • Jmeter扩展组件:图形监视器-PerfMon (Servers Performance Monitoring)
    1、是什么用于监听服务器CPU、IO、网络等各项指标的组件2、如何实现Jmeter​本身不具备该功能,需要下载第三方实现在服务器端安装监听程序,在测试机端安装接收程序监听程序:Ser......
  • [Java] jackson 和 fastjson 处理 JSON对比
    JSON字符串->对象处理原型数值实体类@Setter@Getter@ToStringpublicclassInfo{privateintage;}测试代码@TestpublicvoidtestString()throwsJso......
  • Java注解(2):实现自己的ORM
    搞过Java的码农都知道,在J2EE开发中一个(确切地说,应该是一类)很重要的框架,那就是ORM(ObjectRelationalMapping,对象关系映射)。它把Java中的类和数据库中的表关联起来,可以像操......
  • delphi FormatFloat随笔
    用FormatFloat来处理浮点数,是一个很好的选择.我这里只讲一种语法:FormatFloat(格式,数值)第一坑:第二参数为数值类型,别传个文本值进去.第二坑:返回值是一......
  • Cannot apply DjangoModelPermissionsOrAnonReadOnly on a view that does not set `.
    这个问题是在使用djangoREST做自定义认证的时候出现的 解决方法是在settings.py中注释掉这个REST_FRAMEWORK={'DEFAULT_PERMISSION_CLASSES':['rest......
  • Smartform 版本对比
    下面开始干货:Smartform是没有版本的。如果简单对比下版本是不是一致,可以直接看最后修改时间或者传输时间。但是如果想看看两个不同“版本”的smartforms具体差异,不想一个......
  • smartforms修改建议
    下面开始干货:因为smartforms本身不会产生版本所以不能进行回滚(版本覆盖)。而调smartforms格式的时候又非常麻烦。为了防止修改错误无法恢复到原来版本,建议每次修改前,下载smar......
  • DEBUG系列十:Smartforms debug
    有时候需要debug打印程序。可能里面会写一些代码处理逻辑,直接在这里打断点是打不上的。可以这样:直接执行会转到对应的functionmodule基本自开发的代码都在F01的include里......