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 相关文章推荐
Windows系统配置python脚本开机启动的3种方法分享
Mar 10 Python
Python判断直线和矩形是否相交的方法
Jul 14 Python
Python制作爬虫抓取美女图
Jan 20 Python
详解Python在七牛云平台的应用(一)
Dec 05 Python
Django分页查询并返回jsons数据(中文乱码解决方法)
Aug 02 Python
django如何连接已存在数据的数据库
Aug 14 Python
python使用Plotly绘图工具绘制气泡图
Apr 01 Python
python中break、continue 、exit() 、pass终止循环的区别详解
Jul 08 Python
python模块常用用法实例详解
Oct 17 Python
keras load model时出现Missing Layer错误的解决方式
Jun 11 Python
python使用scapy模块实现ARP扫描的过程
Jan 21 Python
Jupyter Notebook内使用argparse报错的解决方案
Jun 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
完美实现GIF动画缩略图的php代码
2011/01/02 PHP
PHP date()函数警告: It is not safe to rely on the system解决方法
2014/08/20 PHP
PHP递归遍历指定文件夹内的文件实现方法
2016/11/15 PHP
js event事件的传递与冒泡处理
2009/12/06 Javascript
读jQuery之九 一些瑕疵说明
2011/06/21 Javascript
jquery教程ajax请求json数据示例
2014/01/13 Javascript
JavaScript实现找出字符串中第一个不重复的字符
2014/09/03 Javascript
jQuery中parentsUntil()方法用法实例
2015/01/07 Javascript
EasyUI的doCellTip实现鼠标放到单元格上提示单元格内容
2016/08/24 Javascript
Javascript中arguments对象的详解与使用方法
2016/10/04 Javascript
JS简单实现表格排序功能示例
2016/12/20 Javascript
微信小程序之滚动视图容器的实现方法
2017/09/26 Javascript
vue.js将时间戳转化为日期格式的实现代码
2018/06/05 Javascript
Angular动画实现的2种方式以及添加购物车动画实例代码
2018/08/09 Javascript
微信小程序异步API为Promise简化异步编程的操作方法
2018/08/14 Javascript
vuejs点击class变化的实例
2018/09/05 Javascript
如何基于layui的laytpl实现数据绑定的示例代码
2020/04/10 Javascript
jQuery实现的分页插件完整示例
2020/05/26 jQuery
echarts实现获取datazoom的起始值(包括x轴和y轴)
2020/07/20 Javascript
python局域网ip扫描示例分享
2014/04/03 Python
总结用Pdb库调试Python的方式及常用的命令
2016/08/18 Python
Python判断文件和字符串编码类型的实例
2017/12/21 Python
Django 2.0版本的新特性抢先看!
2018/01/05 Python
python web框架 django wsgi原理解析
2019/08/20 Python
解决Pycharm 包已经下载,但是运行代码提示找不到模块的问题
2019/08/31 Python
Python操作redis和mongoDB的方法
2019/12/19 Python
Python Pillow(PIL)库的用法详解
2020/09/19 Python
Python3使用 GitLab API 进行批量合并分支
2020/10/15 Python
CSS3制作精致的照片墙特效
2016/06/07 HTML / CSS
使用CSS3创建动态菜单效果
2015/07/10 HTML / CSS
缅怀先烈演讲稿
2014/09/03 职场文书
诚信承诺书
2015/01/19 职场文书
听证会主持词
2015/07/03 职场文书
Python函数式编程中itertools模块详解
2021/09/15 Python
python标准库ElementTree处理xml
2022/05/20 Python
ubuntu开机后ROS程序自启动问题
2022/12/24 Servers