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的Django框架部署的一些建议
Apr 09 Python
python爬虫基本知识
Mar 05 Python
使用Python通过win32 COM打开Excel并添加Sheet的方法
May 02 Python
读取json格式为DataFrame(可转为.csv)的实例讲解
Jun 05 Python
Python实现的逻辑回归算法示例【附测试csv文件下载】
Dec 28 Python
python 对类的成员函数开启线程的方法
Jan 22 Python
Windows 安装 Anaconda3+PyCharm的方法步骤
Jun 13 Python
Python初学者常见错误详解
Jul 02 Python
Django Xadmin多对多字段过滤实例
Apr 07 Python
使用python无账号无限制获取企查查信息的实例代码
Apr 17 Python
Python如何在windows环境安装pip及rarfile
Jun 15 Python
Python request中文乱码问题解决方案
Sep 17 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
PHPExcel实现表格导出功能示例【带有多个工作sheet】
2018/06/13 PHP
document.all还是document.getElementsByName?
2006/07/21 Javascript
javascript 表单规则集合对象
2009/07/21 Javascript
40个有创意的jQuery图片和内容滑动及弹出插件收藏集之三
2012/01/03 Javascript
jQuery制作的别致导航有阴影背景高亮模式窗口
2014/04/15 Javascript
js获取窗口相对于屏幕左边和上边的位置坐标
2014/05/15 Javascript
javascript原始值和对象引用实例分析
2015/04/25 Javascript
《JavaScript高级编程》学习笔记之object和array引用类型
2015/11/01 Javascript
基于jQuery实现响应式圆形图片轮播特效
2015/11/25 Javascript
js ajaxfileupload.js上传报错的解决方法
2016/05/05 Javascript
分享jQuery网页元素拖拽插件
2020/12/01 Javascript
JS识别浏览器类型(电脑浏览器和手机浏览器)
2016/11/18 Javascript
详解JS中定时器setInterval和setTImeout的this指向问题
2017/01/06 Javascript
用js将long型数据转换成date型或datetime型的实例
2017/07/03 Javascript
Vue自定义指令使用方法详解
2017/08/21 Javascript
在JS循环中使用async/await的方法
2018/10/12 Javascript
vue中的ref和$refs的使用
2018/11/22 Javascript
vue配置font-awesome5的方法步骤
2019/01/27 Javascript
vue移动端的左右滑动事件详解
2020/06/17 Javascript
Vue+Element UI 树形控件整合下拉功能菜单(tree + dropdown +input)
2020/08/28 Javascript
如何在面试中手写出javascript节流和防抖函数
2020/10/22 Javascript
pip install urllib2不能安装的解决方法
2018/06/12 Python
Django中如何防范CSRF跨站点请求伪造攻击的实现
2019/04/28 Python
python实现微信每日一句自动发送给喜欢的人
2019/04/29 Python
python将字符串list写入excel和txt的实例
2019/07/20 Python
Python decimal模块使用方法详解
2020/06/08 Python
如何快速理解python的垃圾回收机制
2020/09/01 Python
英国领先的品牌珠宝和配件供应商:Acotis Jewellery
2018/03/07 全球购物
Currentbody澳大利亚:美容仪专家
2019/11/11 全球购物
SOA面试题:如何在SOA中实现松耦合
2013/07/21 面试题
电子商务助理求职自荐信
2014/04/10 职场文书
企业文化理念标语
2014/06/10 职场文书
小学数学教研活动总结
2014/07/01 职场文书
团员个人年度总结
2015/02/26 职场文书
学校社团活动总结
2015/05/07 职场文书
运动员加油词
2015/07/18 职场文书