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 相关文章推荐
浅谈MySQL中的触发器
May 05 Python
详解Python的Django框架中的templates设置
May 11 Python
Python第三方库xlrd/xlwt的安装与读写Excel表格
Jan 21 Python
详谈Python2.6和Python3.0中对除法操作的异同
Apr 28 Python
解决PyCharm import torch包失败的问题
Oct 13 Python
Python小游戏之300行代码实现俄罗斯方块
Jan 04 Python
解决使用export_graphviz可视化树报错的问题
Aug 09 Python
Python命令行click参数用法解析
Dec 19 Python
使用python实现微信小程序自动签到功能
Apr 27 Python
Python docutils文档编译过程方法解析
Jun 23 Python
Python实现一个优先级队列的方法
Jul 31 Python
Pytorch之Tensor和Numpy之间的转换的实现方法
Sep 03 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
收音机玩机评测 406 篇视频合集
2020/03/11 无线电
PHP mkdir()定义和用法
2009/01/14 PHP
WAF的正确bypass
2017/01/05 PHP
PHP mongodb操作类定义与用法示例【适合mongodb2.x和mongodb3.x】
2018/06/16 PHP
PHP常量define和const的区别详解
2019/05/18 PHP
再谈querySelector和querySelectorAll的区别与联系
2012/04/20 Javascript
JavaScript操作Cookie方法实例分析
2015/05/27 Javascript
理解Javascript的call、apply
2015/12/16 Javascript
jQuery实现的分页功能示例
2017/01/22 Javascript
jQuery插件echarts实现的多柱子柱状图效果示例【附demo源码下载】
2017/03/04 Javascript
使用Object.defineProperty如何巧妙找到修改某个变量的准确代码位置
2018/11/02 Javascript
怎样使你的 JavaScript 代码简单易读(推荐)
2019/04/16 Javascript
nodejs二进制与Buffer的介绍与使用
2019/07/11 NodeJs
vue页面更新patch的实现示例
2020/03/25 Javascript
利用PHP实现递归删除链表元素的方法示例
2020/10/23 Javascript
Python3利用Dlib19.7实现摄像头人脸识别的方法
2018/05/11 Python
用python生成1000个txt文件的方法
2018/10/25 Python
Python中文编码知识点
2019/02/18 Python
自适应线性神经网络Adaline的python实现详解
2019/09/30 Python
python的range和linspace使用详解
2019/11/27 Python
属性与 @property 方法让你的python更高效
2020/09/21 Python
CSS3实现的文本3D效果附图
2014/09/03 HTML / CSS
Desigual德国官网:在线购买原创服装
2018/03/27 全球购物
TripAdvisor斯洛伐克:阅读评论、比较价格和酒店预订
2018/04/25 全球购物
如何在C# winform中异步调用web services
2015/09/21 面试题
Servlet都有哪些方法?主要作用是什么?
2014/03/04 面试题
大学生创业策划书
2014/02/02 职场文书
经济职业学院毕业生自荐书
2014/03/17 职场文书
关于感恩的演讲稿500字
2014/08/26 职场文书
党员创先争优心得体会
2014/09/11 职场文书
六查六看六改心得体会
2014/10/14 职场文书
电影建国大业观后感
2015/06/01 职场文书
汤姆叔叔的小屋读书笔记
2015/06/30 职场文书
学习社交礼仪心得体会
2016/01/22 职场文书
python实现ROA算子边缘检测算法
2021/04/05 Python
Python中相见恨晚的技巧
2021/04/13 Python