django序列化时使用外键的真实值操作


Posted in Python onJuly 15, 2020

展示:

一般情况下序列化得到的外键的内容只是id:

...
{
 fields: 
 {
  uat_date: "2015-07-25",
  statu: "CG",
  name: "慢赢优化",
  tester: [
    1
   ],
  product_manager: 1,
  module: [
    2,
    3
   ],
  project: 1,
  plan_version: 1,
  publish_date: "2015-07-25",
  actual_version: 1,
  type: "XQ",
  developer: [
   1
  ]
 },
 model: "amazingTable.content",
 pk: 1
}
...

序列化时得到外键的真实值:

...
{
 fields: 
 {
  uat_date: "2015-07-25",
  statu: "CG",
  name: "慢赢优化",
  tester: 
   [
    [
     "kevin"
    ]
   ],
  product_manager: 
   [
    "kevin"
   ],
  module: 
   [
    [
     "closewebbus",
     "我是描述"
    ],
    [
     "xckhapp",
     "我是描述"
    ]
   ],
  project: 1,
  plan_version: 1,
  publish_date: "2015-07-25",
  actual_version: 1,
  type: "XQ",
  developer: [
   [
    "kevin"
   ]
  ]
 },
 model: "amazingTable.content",
 pk: 1
}
...

方法:

我序列化的是Content表,它含有一个外键关联的是Module表,1对多

我要先序列化Module表,然后序列化Content表的时候才可以使用到Module的真实值

class ModuleManager(models.Manager):
 def get_by_natural_key(self, name, description):
  return self.get(name = name, description = description)


class Module(models.Model):
 objects = ModuleManager()
 name = models.CharField(max_length=100, unique=True)
 description = models.CharField(max_length=100, blank=True, null=True)

 # natual_key的序列化
 def natural_key(self):
  return (self.name, self.description)

 # natual_keys的解序列化
 class Meta:
  unique_together = (('name', 'description'),)

序列化是否使用真实值:

jsons = serializers.serialize('json', queryset,use_natural_foreign_keys=False)

jsons = serializers.serialize('json', queryset,use_natural_foreign_keys=True)

附:

如果要给Content表序列化,那么要使用到外键的actual_key,要保证外键先序列化,如下依赖:

class Content(models.Model):
 name = models.CharField(max_length=100)
 ...
 module = models.ManyToManyField('Module')


 def natural_key(self):
  return (self.name,) + self.module.natural_key()
 # 和"def"同缩进
 natural_key.dependencies = ['example_app.module']

补充知识:django原生的序列化serialize解析

在写接口的时候,大家都离不开对query结果集的序列化

嗯嗯嗯,一般我们都有DRF里面的序列化工具,但是django原生的serialize你们有

用过吗?????????????

上代码:

from django.core.serializers import serialize

class Test(APIView):
 def get(self,request):
 origin_data = Test.objects.all()
 serialized_data = serialize('json',origin_data)
 return HttpResponse(serialized_data )

当然,再有更便捷的工具的情况下,这种方法并不常用

在有特定需要的时候,使用这种django原生序列化,还是十分方便的

以上这篇django序列化时使用外键的真实值操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python操作MySQL数据库9个实用实例
Dec 11 Python
python 日志增量抓取实现方法
Apr 28 Python
用Python一键搭建Http服务器的方法
Jun 01 Python
python通过tcp发送xml报文的方法
Dec 28 Python
详解python中TCP协议中的粘包问题
Mar 22 Python
Django项目中添加ldap登陆认证功能的实现
Apr 04 Python
python实现大文件分割与合并
Jul 22 Python
使用Python自动生成HTML的方法示例
Aug 06 Python
python关闭占用端口方式
Dec 17 Python
tensorflow/core/platform/cpu_feature_guard.cc:140] Your CPU supports instructions that this T
Jun 22 Python
如何验证python安装成功
Jul 06 Python
Python如何获取文件路径/目录
Sep 22 Python
Django:使用filter的pk进行多值查询操作
Jul 15 #Python
django models里数据表插入数据id自增操作
Jul 15 #Python
python报错: 'list' object has no attribute 'shape'的解决
Jul 15 #Python
解决运行出现'dict' object has no attribute 'has_key'问题
Jul 15 #Python
解决运行django程序出错问题 'str'object has no attribute'_meta'
Jul 15 #Python
解决导入django_filters不成功问题No module named 'django_filter'
Jul 15 #Python
django rest framework使用django-filter用法
Jul 15 #Python
You might like
实用的简单PHP分页集合包括使用方法
2013/10/21 PHP
浅谈php函数serialize()与unserialize()的使用方法
2014/08/19 PHP
php实现根据词频生成tag云的方法
2015/04/17 PHP
php使用cookie实现记住用户名和密码实现代码
2015/04/27 PHP
php操作xml并将其插入数据库的实现方法
2016/09/08 PHP
php获取文章内容第一张图片的方法示例
2017/07/03 PHP
PHP设计模式(三)建造者模式Builder实例详解【创建型】
2020/05/02 PHP
基于jquery库的tab新形式使用
2012/11/16 Javascript
web开发人员学习jQuery的6大理由及jQuery的优势介绍
2013/01/03 Javascript
JS去除数组重复值的五种不同方法
2013/09/06 Javascript
jquery简单实现鼠标经过导航条改变背景图
2013/12/17 Javascript
ES6概念 Symbol toString()方法
2016/12/25 Javascript
详解AngularJS1.6版本中ui-router路由中/#!/的解决方法
2017/05/22 Javascript
AngularJS 验证码60秒倒计时功能的实现
2017/06/05 Javascript
jQuery实现列表的增加和删除功能
2018/06/14 jQuery
js调用设备摄像头的方法
2018/07/19 Javascript
Angular中sweetalert弹框的基本使用教程
2018/07/22 Javascript
JavaScript递归函数定义与用法实例分析
2019/01/24 Javascript
ES6模板字符串和标签模板的应用实例分析
2019/06/25 Javascript
解决layui-table单元格设置为百分比在ie8下不能自适应的问题
2019/09/28 Javascript
使用node.JS中的url模块解析URL信息
2020/02/06 Javascript
原生JavaScript实现购物车
2021/01/10 Javascript
[01:45]DOTA2新英雄“神谕者”全方位展示
2014/11/21 DOTA
Python Web框架Tornado运行和部署
2020/10/19 Python
详解python3百度指数抓取实例
2016/12/12 Python
python flask 多对多表查询功能
2017/06/25 Python
Python调用C# Com dll组件实战教程
2017/10/12 Python
PyQt QListWidget修改列表项item的行高方法
2019/06/20 Python
Python 装饰器@,对函数进行功能扩展操作示例【开闭原则】
2019/10/17 Python
VSCode中自动为Python文件添加头部注释
2019/11/14 Python
工商治理实习生的自我评价分享
2014/02/20 职场文书
机工车间主任岗位职责
2014/03/05 职场文书
超市创业计划书
2014/04/24 职场文书
优秀党员学习焦裕禄精神思想汇报范文
2014/09/10 职场文书
学生保证书格式
2015/02/27 职场文书
2015年党建工作汇报材料
2015/06/25 职场文书