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中的内置函数getattr()介绍及示例
Jul 20 Python
Python挑选文件夹里宽大于300图片的方法
Mar 05 Python
Python使用scrapy采集时伪装成HTTP/1.1的方法
Apr 08 Python
python在控制台输出进度条的方法
Jun 20 Python
简单的Apache+FastCGI+Django配置指南
Jul 22 Python
Python实现短网址ShortUrl的Hash运算实例讲解
Aug 10 Python
Python实现将doc转化pdf格式文档的方法
Jan 19 Python
python 读写excel文件操作示例【附源码下载】
Jun 19 Python
OpenCV Python实现图像指定区域裁剪
Mar 12 Python
如何用Anaconda搭建虚拟环境并创建Django项目
Aug 02 Python
pymongo insert_many 批量插入的实例
Dec 05 Python
Python爬虫实例之2021猫眼票房字体加密反爬策略(粗略版)
Feb 22 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 Ajax实现页面无刷新发表评论
2007/01/02 PHP
CURL的学习和应用(附多线程实现)
2013/06/03 PHP
php+mysql实现数据库随机重排实例
2014/10/17 PHP
fckeditor上传文件按日期存放及重命名方法
2015/05/22 PHP
PHP levenshtein()函数用法讲解
2019/03/08 PHP
js操作CheckBoxList实现全选/反选(在客服端完成)
2013/02/02 Javascript
引用 js在IE与FF之间的区别详细解析
2013/11/20 Javascript
JS动态添加与删除select中的Option对象(示例代码)
2013/12/25 Javascript
js实现文章文字大小字号功能完整实例
2014/11/01 Javascript
jquery实现ajax提交表单信息的简单方法(推荐)
2016/08/24 Javascript
javascript入门之string对象【新手必看】
2016/11/22 Javascript
JavaScript之浏览器对象_动力节点Java学院整理
2017/07/03 Javascript
React教程之Props验证的具体用法(Props Validation)
2017/09/04 Javascript
JS实现DOM节点插入操作之子节点与兄弟节点插入操作示例
2018/07/30 Javascript
bootstrap select2插件用ajax来获取和显示数据的实例
2018/08/09 Javascript
vue利用v-for嵌套输出多层对象,分别输出到个表的方法
2018/09/07 Javascript
基于javascript canvas实现五子棋游戏
2020/07/08 Javascript
vue实现简单全选和反选功能
2020/09/15 Javascript
Vue+scss白天和夜间模式切换功能的实现方法
2021/01/05 Vue.js
Python实现生成简单的Makefile文件代码示例
2015/03/10 Python
详解Python中类的定义与使用
2017/04/11 Python
python删除字符串中指定字符的方法
2018/08/13 Python
Python基本数据结构与用法详解【列表、元组、集合、字典】
2019/03/23 Python
django项目登录中使用图片验证码的实现方法
2019/08/15 Python
Python性能分析工具Profile使用实例
2019/11/19 Python
python selenium操作cookie的实现
2020/03/18 Python
python里反向传播算法详解
2020/11/22 Python
Python实现Excel自动分组合并单元格
2021/02/22 Python
【HTML5】3D模型--百行代码实现旋转立体魔方实例
2016/12/16 HTML / CSS
JackJones官方旗舰店:杰克琼斯男装
2018/03/27 全球购物
公司培训心得体会
2014/01/03 职场文书
学雷锋演讲稿
2014/03/04 职场文书
老师对学生的寄语
2014/04/09 职场文书
青安岗事迹材料
2014/05/14 职场文书
群众路线剖析材料怎么写
2014/10/09 职场文书
幼儿园大班教师随笔
2015/08/14 职场文书