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 04 Python
Python随机生成均匀分布在单位圆内的点代码示例
Nov 13 Python
Python内置函数——__import__ 的使用方法
Nov 24 Python
运用TensorFlow进行简单实现线性回归、梯度下降示例
Mar 05 Python
Python实现统计给定列表中指定数字出现次数的方法
Apr 11 Python
Python的高阶函数用法实例分析
Apr 11 Python
python3.4+pycharm 环境安装及使用方法
Jun 13 Python
Python小程序 控制鼠标循环点击代码实例
Oct 08 Python
python 中的[:-1]和[::-1]的具体使用
Feb 13 Python
Pyecharts 动态地图 geo()和map()的安装与用法详解
Mar 25 Python
2020版Python学习路线图(附学习资料)
Sep 15 Python
详解Python爬虫爬取博客园问题列表所有的问题
Jan 18 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
PHP实现的购物车类实例
2015/06/17 PHP
php表单加入Token防止重复提交的方法分析
2016/10/10 PHP
PHP isset empty函数相关面试题及解析
2020/12/11 PHP
url地址自动加#号问题说明
2010/08/21 Javascript
基于jquery实现控制经纬度显示地图与卫星
2013/05/20 Javascript
javascript中match函数的用法小结
2014/02/08 Javascript
js charAt的使用示例
2014/02/18 Javascript
js实现checkbox全选和反选示例
2014/05/01 Javascript
前端必备神器 Snap.svg 弹动效果
2014/11/10 Javascript
JQuery中基础过滤选择器用法实例分析
2015/05/18 Javascript
AngularJS中实现显示或隐藏动画效果的方式总结
2015/12/31 Javascript
Javascript单例模式的介绍和实例
2016/10/08 Javascript
纯javascript版日历控件
2016/11/24 Javascript
AngularJS 支付倒计时功能实现思路
2017/06/05 Javascript
node.js 利用流实现读写同步,边读边写的方法
2017/09/11 Javascript
js仿京东放大镜效果
2020/08/09 Javascript
jQuery实现全选按钮
2021/01/01 jQuery
Python读写文件方法总结
2015/06/09 Python
python利用装饰器进行运算的实例分析
2015/08/04 Python
Python 抓取微信公众号账号信息的方法
2019/06/14 Python
解决Django 在ForeignKey中出现 non-nullable field错误的问题
2019/08/06 Python
python 生成器和迭代器的原理解析
2019/10/12 Python
基于Python实现签到脚本过程解析
2019/10/25 Python
python base64库给用户名或密码加密的流程
2020/01/02 Python
Python使用sys.exc_info()方法获取异常信息
2020/07/23 Python
html5 web本地存储将取代我们的cookie
2012/12/26 HTML / CSS
为女性购买传统的印度服装和婚纱:Kalkifashion
2019/07/22 全球购物
台湾时尚彩瞳专门店:imeime
2019/08/16 全球购物
数控专业应届生求职信
2013/11/27 职场文书
水务局局长岗位职责
2013/11/28 职场文书
领班岗位职责范文
2014/02/06 职场文书
小区门卫岗位职责范本
2014/08/24 职场文书
团组织推优材料
2014/12/29 职场文书
法人代表证明书范本
2015/06/18 职场文书
Nginx配置https原理及实现过程详解
2021/03/31 Servers
Python采集股票数据并制作可视化柱状图
2022/04/04 Python