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编码时应该注意的几个情况
Mar 04 Python
Linux环境下MySQL-python安装过程分享
Feb 02 Python
使用Python的Django框架实现事务交易管理的教程
Apr 20 Python
Python使用面向对象方式创建线程实现12306售票系统
Dec 24 Python
浅谈python字典多键值及重复键值的使用
Nov 04 Python
使用python实现接口的方法
Jul 07 Python
Python数据分析pandas模块用法实例详解
Nov 20 Python
关于python中plt.hist参数的使用详解
Nov 28 Python
python实现发送QQ邮件(可加附件)
Dec 23 Python
Python爬虫入门教程02之笔趣阁小说爬取
Jan 24 Python
Python基于opencv的简单图像轮廓形状识别(全网最简单最少代码)
Jan 28 Python
python3实现Dijkstra算法最短路径的实现
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
第九节 绑定 [9]
2006/10/09 PHP
php实现excel中rank函数功能的方法
2015/01/20 PHP
PHP获取当前日期和时间及格式化方法参数
2015/05/11 PHP
实例简介PHP的一些高级面向对象编程的特性
2015/11/27 PHP
CentOS下PHP7的编译安装及MySQL的支持和一些常见问题的解决办法
2015/12/17 PHP
PHP7扩展开发之hello word实现方法详解
2018/01/15 PHP
Nigma vs Alliance BO5 第二场2.14
2021/03/10 DOTA
JS实现FLASH幻灯片图片切换效果的方法
2015/03/04 Javascript
Angularjs material 实现搜索框功能
2016/03/08 Javascript
浅谈JavaScript的push(),pop(),concat()方法
2016/06/03 Javascript
Bootstrap前端开发案例一
2016/06/17 Javascript
Javascript中常见的逻辑题和解决方法
2016/09/17 Javascript
jQuery基本筛选选择器实例代码
2017/02/06 Javascript
vue.js利用Object.defineProperty实现双向绑定
2017/03/09 Javascript
JavaScript比较两个数组的内容是否相同(推荐)
2017/05/02 Javascript
微信小程序通过保存图片分享到朋友圈功能
2018/05/24 Javascript
Vue中util的工具函数实例详解
2019/07/08 Javascript
Python的gevent框架的入门教程
2015/04/29 Python
Python中threading模块join函数用法实例分析
2015/06/04 Python
python使用插值法画出平滑曲线
2018/12/15 Python
Python绘制并保存指定大小图像的方法
2019/01/10 Python
Python数据类型之Set集合实例详解
2019/05/07 Python
python安装requests库的实例代码
2019/06/25 Python
Python使用Pandas对csv文件进行数据处理的方法
2019/08/01 Python
Django DRF APIView源码运行流程详解
2020/08/17 Python
PyQt5结合matplotlib绘图的实现示例
2020/09/15 Python
CSS3利用text-shadow属性实现多种效果的文字样式展现方法
2016/08/25 HTML / CSS
外联部演讲稿
2014/05/24 职场文书
2014年学校办公室工作总结
2014/12/19 职场文书
介绍信模板
2015/01/31 职场文书
教师个人年度总结
2015/02/11 职场文书
月考总结与反思
2015/10/22 职场文书
《百分数的认识》教学反思
2016/02/19 职场文书
Vue通过懒加载提升页面响应速度
2021/05/10 Vue.js
使用Django框架创建项目
2022/06/10 Python
Redis Lua脚本实现ip限流示例
2022/07/15 Redis