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 实现文件的递归拷贝实现代码
Aug 02 Python
Python使用urllib2模块实现断点续传下载的方法
Jun 17 Python
Python内置函数OCT详解
Nov 09 Python
简单学习Python多进程Multiprocessing
Aug 29 Python
Python使用修饰器执行函数的参数检查功能示例
Sep 26 Python
解决nohup重定向python输出到文件不成功的问题
May 11 Python
opencv python 图像去噪的实现方法
Aug 31 Python
Python设计模式之装饰模式实例详解
Jan 21 Python
python调用其他文件函数或类的示例
Jul 16 Python
Python实现大数据收集至excel的思路详解
Jan 03 Python
python实现企业微信定时发送文本消息的示例代码
Nov 24 Python
用python删除文件夹中的重复图片(图片去重)
May 12 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常用技术文之文件操作和目录操作总结
2014/09/27 PHP
PHP获取指定月份第一天和最后一天的方法
2015/07/18 PHP
thinkPHP框架实现多表查询的方法
2018/06/14 PHP
thinkphp5框架路由原理与用法详解
2020/02/11 PHP
采用CSS和JS,刚好我最近有个站点要用到下拉菜单!
2006/06/26 Javascript
简单的JS多重继承示例
2008/03/13 Javascript
js中substring和substr的详细介绍与用法
2013/08/29 Javascript
JavaScript初学者建议:不要去管浏览器兼容
2014/02/04 Javascript
Jquery 返回json数据在IE浏览器中提示下载的问题
2014/05/18 Javascript
jQuery控制的不同方向的滑动(向左、向右滑动等)
2014/07/18 Javascript
js数组依据下标删除元素
2015/04/14 Javascript
IE中document.createElement的iframe无法设置属性name的解决方法
2015/09/14 Javascript
vue项目中公用footer组件底部位置的适配问题
2018/05/10 Javascript
layer弹出层显示在top顶层的方法
2019/09/11 Javascript
JavaScript Blob对象原理及用法详解
2020/10/14 Javascript
[11:57]《一刀刀一天》第十七期:TI中国军团加油!
2014/05/26 DOTA
简单谈谈Python中的反转字符串问题
2016/10/24 Python
详解Python 数据库的Connection、Cursor两大对象
2018/06/25 Python
Python实现简单的用户交互方法详解
2018/09/25 Python
python将字符串转换成json的方法小结
2019/07/09 Python
python破解bilibili滑动验证码登录功能
2019/09/11 Python
python为Django项目上的每个应用程序创建不同的自定义404页面(最佳答案)
2020/03/09 Python
python解释器安装教程的方法步骤
2020/07/02 Python
Zipadee-Zip襁褓过渡毯:Sleeping Baby
2018/12/30 全球购物
阿姆斯特丹杜莎夫人蜡像馆官方网站:Madame Tussauds Amsterdam
2019/03/12 全球购物
西班牙高科技产品购物网站:MejorDeseo
2019/09/08 全球购物
泰国时尚电商:POMELO Fashion
2020/03/11 全球购物
个性大学生自我评价
2013/12/04 职场文书
农村婚礼证婚词
2014/01/08 职场文书
优秀导游先进事迹材料
2014/01/25 职场文书
主题教育活动总结
2014/05/05 职场文书
敬老月活动总结
2014/08/28 职场文书
因家庭原因离职的辞职信范文
2015/05/12 职场文书
导游词之山东八大关
2019/12/18 职场文书
Vue2.0搭建脚手架
2022/03/13 Vue.js
Zabbix6通过ODBC方式监控Oracle 19C的详细过程
2022/09/23 Servers