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 图片验证码代码分享
Jul 04 Python
Python操作SQLite数据库的方法详解【导入,创建,游标,增删改查等】
Jul 11 Python
python实现杨辉三角思路
Jul 14 Python
Python编程实现正则删除命令功能
Aug 30 Python
利用Python2下载单张图片与爬取网页图片实例代码
Dec 25 Python
python实现京东秒杀功能
Jul 30 Python
python的debug实用工具 pdb详解
Jul 12 Python
django 数据库连接模块解析及简单长连接改造方法
Aug 29 Python
Matplotlib绘制雷达图和三维图的示例代码
Jan 07 Python
python中对二维列表中一维列表的调用方法
Jun 07 Python
Python基于百度API识别并提取图片中文字
Jun 27 Python
Python socket如何解析HTTP请求内容
Feb 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
thinkPHP5框架闭包函数与子查询传参用法示例
2018/08/02 PHP
PHP多进程通信-消息队列使用
2019/03/08 PHP
javascript 原型继承介绍
2011/08/30 Javascript
Node.js+Express+MySql实现用户登录注册功能
2017/07/10 Javascript
Node.js从字符串生成文件流的实现方法
2019/08/18 Javascript
JavaScript实现文件下载并重命名代码实例
2019/12/12 Javascript
微信小程序之左右布局的实现代码
2019/12/13 Javascript
Node.js中文件系统fs模块的使用及常用接口
2020/03/06 Javascript
vue实现前端分页完整代码
2020/06/17 Javascript
Python代码解决RenderView窗口not found问题
2016/08/28 Python
使用tensorflow实现AlexNet
2017/11/20 Python
Python3 中文文件读写方法
2018/01/23 Python
python爬虫框架scrapy实现模拟登录操作示例
2018/08/02 Python
详解python播放音频的三种方法
2019/09/23 Python
Python 支持向量机分类器的实现
2020/01/15 Python
Python实现FLV视频拼接功能
2020/01/21 Python
Python 实现打印单词的菱形字符图案
2020/04/12 Python
python删除某个目录文件夹的方法
2020/05/26 Python
Python Switch Case三种实现方法代码实例
2020/06/18 Python
解决keras backend 越跑越慢问题
2020/06/18 Python
Python高阶函数与装饰器函数的深入讲解
2020/11/10 Python
matplotlib对象拾取事件处理的实现
2021/01/14 Python
使用css3和jquery实现可伸缩搜索框
2014/02/12 HTML / CSS
KIEHL’S科颜氏官方旗舰店:源自美国的顶级护肤品牌
2018/06/07 全球购物
澳大利亚窗帘商店:Curtain Wonderland
2019/12/01 全球购物
乌克兰移动电子产品和相关配件的在线商店:iTMag
2020/03/16 全球购物
营销总监岗位职责范本
2014/02/26 职场文书
献爱心倡议书
2014/04/14 职场文书
生产工厂门卫岗位职责
2014/09/26 职场文书
2015新年联欢晚会开场白
2014/12/14 职场文书
2015年度优秀员工获奖感言
2015/07/31 职场文书
导游词之珠海轮廓
2019/10/25 职场文书
oracle表分区的概念及操作
2021/04/24 Oracle
Opencv中cv2.floodFill算法的使用
2021/06/18 Python
Java实现带图形界面的聊天程序
2022/06/10 Java/Android
JavaScript设计模式之原型模式详情
2022/06/21 Javascript