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线程池的实现实例
Nov 18 Python
python进阶教程之动态类型详解
Aug 30 Python
bpython 功能强大的Python shell
Feb 16 Python
Pycharm学习教程(7)虚拟机VM的配置教程
May 04 Python
Python实现学校管理系统
Jan 11 Python
python: 自动安装缺失库文件的方法
Oct 22 Python
selenium设置proxy、headers的方法(phantomjs、Chrome、Firefox)
Nov 29 Python
Tensorflow分类器项目自定义数据读入的实现
Feb 05 Python
深入浅析Python科学计算库Scipy及安装步骤
Oct 12 Python
基于K.image_data_format() == 'channels_first' 的理解
Jun 29 Python
Python描述数据结构学习之哈夫曼树篇
Sep 07 Python
selenium学习教程之定位以及切换frame(iframe)
Jan 04 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
zend framework多模块多布局配置
2011/02/26 PHP
php shell超强免杀、减少体积工具实现代码
2012/10/16 PHP
php number_format() 函数通过千位分组来格式化数字的实现代码
2013/08/06 PHP
ThinkPHP3.1基础知识快速入门
2014/06/19 PHP
PHP邮件群发机实现代码
2016/02/16 PHP
php实现图片上传时添加文字和图片水印技巧
2020/04/18 PHP
jQuery 选择表格(table)里的行和列及改变简单样式
2012/12/15 Javascript
javascript获取下拉列表框当中的文本值示例代码
2013/07/31 Javascript
14款NodeJS Web框架推荐
2014/07/11 NodeJs
JavaScript DOM节点添加示例
2014/07/16 Javascript
C++中的string类的用法小结
2015/08/07 Javascript
jQuery实现垂直半透明手风琴特效代码分享
2015/08/21 Javascript
thinkphp实现无限分类(使用递归)
2015/12/19 Javascript
干货分享:让你分分钟学会javascript闭包
2015/12/25 Javascript
Javascript中常见的逻辑题和解决方法
2016/09/17 Javascript
jquery表单插件form使用方法详解
2017/01/20 Javascript
vue组件间通信子与父详解(二)
2017/11/07 Javascript
vue-cli中的babel配置文件.babelrc实例详解
2018/02/22 Javascript
jQuery实现文字超过1行、2行或规定的行数时自动加省略号的方法
2018/03/28 jQuery
js DOM的事件常见操作实例详解
2019/12/16 Javascript
Python中处理时间的几种方法小结
2015/04/09 Python
python类继承与子类实例初始化用法分析
2015/04/17 Python
Python中属性和描述符的正确使用
2016/08/23 Python
python实现决策树、随机森林的简单原理
2018/03/26 Python
Python中使用遍历在列表中添加字典遇到的坑
2019/02/27 Python
python中实现栈的三种方法
2020/12/19 Python
Python Pygame实现俄罗斯方块
2021/02/19 Python
css3绘制天猫logo实现代码
2012/11/06 HTML / CSS
HTML5标签使用方法详解
2015/11/27 HTML / CSS
几道Java和数据库的面试题
2013/05/30 面试题
css animation配合SVG制作能量流动效果
2021/03/24 HTML / CSS
银行实习人员自我鉴定
2013/09/22 职场文书
司机个人年终总结
2015/03/03 职场文书
党支部鉴定意见
2015/06/02 职场文书
电力安全教育培训心得体会
2016/01/11 职场文书
vue中this.$http.post()跨域和请求参数丢失的解决
2022/04/08 Vue.js