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 29 Python
python通过邮件服务器端口发送邮件的方法
Apr 30 Python
python中的字典使用分享
Jul 31 Python
python实现m3u8格式转换为mp4视频格式
Feb 28 Python
python广度优先搜索得到两点间最短路径
Jan 17 Python
Django logging配置及使用详解
Jul 23 Python
pytorch程序异常后删除占用的显存操作
Jan 13 Python
Django CSRF认证的几种解决方案
Mar 03 Python
python GUI库图形界面开发之PyQt5信号与槽多窗口数据传递详细使用方法与实例
Mar 08 Python
Python基础之Socket通信原理
Apr 22 Python
浅谈pytorch中的dropout的概率p
May 27 Python
Python数据分析之pandas读取数据
Jun 02 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
Yii2中OAuth扩展及QQ互联登录实现方法
2016/05/16 PHP
PHP实现常用排序算法的方法
2020/02/05 PHP
基于jquery的一个简单的脚本验证插件
2010/04/05 Javascript
Prototype源码浅析 String部分(四)之补充
2012/01/16 Javascript
JS自动缩小超出大小的图片
2012/10/12 Javascript
js交换排序 冒泡排序算法(Javascript版)
2014/10/04 Javascript
Jquery中Event对象属性小结
2015/02/27 Javascript
Bootstrap表单布局样式源代码
2016/07/04 Javascript
JavaScript实现页面定时刷新(定时器,meta)
2016/10/12 Javascript
Bootstrap 3 按钮标签实例代码
2017/02/21 Javascript
JS三目运算(三元运算)方法详解
2017/03/01 Javascript
javascript中json对象json数组json字符串互转及取值方法
2017/04/19 Javascript
iphone刘海屏页面适配方法
2019/05/07 Javascript
通过实例讲解JS如何防抖动
2019/06/15 Javascript
vuex vue简单使用知识点总结
2019/08/29 Javascript
vue-router之解决addRoutes使用遇到的坑
2020/07/19 Javascript
vue使用过滤器格式化日期
2021/01/20 Vue.js
[01:11:08]Winstrike vs NB 2018国际邀请赛淘汰赛BO1 8.21
2018/08/22 DOTA
Python中django学习心得
2017/12/06 Python
python3.6.3+opencv3.3.0实现动态人脸捕获
2018/05/25 Python
使用 Visual Studio Code(VSCode)搭建简单的Python+Django开发环境的方法步骤
2018/12/17 Python
Python socket非阻塞模块应用示例
2019/09/12 Python
使用PyTorch训练一个图像分类器实例
2020/01/08 Python
python 使用openpyxl读取excel数据
2021/02/18 Python
用CSS3实现无限循环的无缝滚动的实例代码
2017/07/04 HTML / CSS
HTML5实现移动端复制功能
2018/04/19 HTML / CSS
anello泰国官方网站:日本流行包包品牌
2019/08/08 全球购物
图书室管理制度
2014/01/19 职场文书
父亲八十大寿答谢词
2014/01/23 职场文书
个人自荐材料
2014/05/23 职场文书
专题民主生活会对照检查材料思想汇报
2014/09/29 职场文书
2015年前台接待工作总结
2015/05/04 职场文书
高一地理教学工作总结
2015/08/12 职场文书
工人先锋号事迹材料(2016精选版)
2016/03/01 职场文书
Java反应式框架Reactor中的Mono和Flux
2021/07/25 Java/Android
Python中Schedule模块使用详解 周期任务神器
2022/04/19 Python