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 fileinput模块使用实例
May 28 Python
Python cookbook(字符串与文本)在字符串的开头或结尾处进行文本匹配操作
Apr 20 Python
Python实现基于POS算法的区块链
Aug 07 Python
python实现转圈打印矩阵
Mar 02 Python
Python爬虫实现使用beautifulSoup4爬取名言网功能案例
Sep 15 Python
快速查找Python安装路径方法
Feb 06 Python
Python3查找列表中重复元素的个数的3种方法详解
Feb 13 Python
Python安装依赖(包)模块方法详解
Feb 14 Python
你应该知道的Python3.6、3.7、3.8新特性小结
May 12 Python
keras中的loss、optimizer、metrics用法
Jun 15 Python
python 实现一个图形界面的汇率计算器
Nov 09 Python
用python制作个视频下载器
Feb 01 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
海贼王:最美的悬赏令!
2020/03/02 日漫
phpMyAdmin下载、安装和使用入门教程
2007/05/31 PHP
php 转换字符串编码 iconv与mb_convert_encoding的区别说明
2011/11/10 PHP
深入理解PHP中的global
2014/08/19 PHP
PHP序列化/对象注入漏洞分析
2016/04/18 PHP
php+js实现百度地图多点标注的方法
2016/11/30 PHP
PHP共享内存使用与信号控制实例分析
2018/05/09 PHP
javascript setTimeout()传递函数参数(包括传递对象参数)
2010/04/07 Javascript
jquery动态添加元素事件失效问题解决方法
2014/05/23 Javascript
Javascript实现颜色rgb与16进制转换的方法
2015/04/18 Javascript
跟我学习javascript的call(),apply(),bind()与回调
2015/11/16 Javascript
AngularJs中route的使用方法和配置
2016/02/04 Javascript
Node.js Mongodb 密码特殊字符 @的解决方法
2017/04/11 Javascript
Node.js中Bootstrap-table的两种分页的实现方法
2017/09/18 Javascript
移动端效果之Swiper详解
2017/10/09 Javascript
简单了解Vue computed属性及watch区别
2020/07/10 Javascript
基于vue hash模式微信分享#号的解决
2020/09/07 Javascript
[02:25]专访DOTA2负责人Erik 国际邀请赛暂不会离开西雅
2014/07/21 DOTA
简单的Python抓taobao图片爬虫
2014/10/26 Python
关于Python中空格字符串处理的技巧总结
2017/08/10 Python
浅谈使用Python内置函数getattr实现分发模式
2018/01/22 Python
利用Python批量提取Win10锁屏壁纸实战教程
2018/03/27 Python
python实现排序算法解析
2018/09/08 Python
opencv之为图像添加边界的方法示例
2019/12/26 Python
Python创建空列表的字典2种方法详解
2020/02/13 Python
pycharm中导入模块错误时提示Try to run this command from the system terminal
2020/03/26 Python
有关HTML5 Video对象的ontimeupdate事件(Chrome上无效)的问题
2013/07/19 HTML / CSS
美国精品家居用品网站:US-Mattress
2016/08/24 全球购物
Foot Locker德国官方网站:美国运动服和鞋类零售商
2018/11/01 全球购物
护士自荐信
2013/10/25 职场文书
行政前台岗位职责
2013/12/04 职场文书
体育口号大全
2014/06/18 职场文书
英文商务邀请函范文
2015/01/31 职场文书
学习经验交流会策划书
2015/11/02 职场文书
2016年记者节感言
2015/12/08 职场文书
使用canvas对video视频某一刻截图功能
2021/09/25 HTML / CSS