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简单实现计算过期时间的方法
Jun 09 Python
Python 调用Java实例详解
Jun 02 Python
Python 自动化表单提交实例代码
Jun 08 Python
TensorFlow实现MLP多层感知机模型
Mar 09 Python
selenium+python截图不成功的解决方法
Jan 30 Python
python Pandas库基础分析之时间序列的处理详解
Jul 13 Python
django数据模型(Model)的字段类型解析
Dec 25 Python
Python tkinter布局与按钮间距设置方式
Mar 04 Python
Django调用支付宝接口代码实例详解
Apr 04 Python
pytorch cuda上tensor的定义 以及减少cpu的操作详解
Jun 23 Python
如何利用python生成MD5并去重
Dec 07 Python
python中HTMLParser模块知识点总结
Jan 25 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
中英文字符串翻转函数
2008/12/09 PHP
PHP 数组入门教程小结
2009/05/20 PHP
PHP写MySQL数据 实现代码
2009/06/15 PHP
php UBB 解析实现代码
2011/11/27 PHP
解析php中用PHPMailer来发送邮件的示例(126.com的例子)
2013/06/24 PHP
PHP CURL获取cookies模拟登录的方法
2013/11/04 PHP
php计算数组不为空元素个数的方法
2014/01/27 PHP
php输入数据统一类实例
2015/02/23 PHP
PHP输出两个数字中间有多少个回文数的方法
2015/03/23 PHP
Ajax PHP JavaScript MySQL实现简易无刷新在线聊天室
2016/08/17 PHP
PHP接口类(interface)的定义、特点和应用示例
2020/05/18 PHP
jqPlot jquery的页面图表绘制工具
2009/07/25 Javascript
Javascript创建Silverlight Plugin以及自定义nonSilverlight和lowSilverlight样式
2010/06/28 Javascript
基于jquery的时间段实现代码
2012/08/02 Javascript
有关javascript的性能优化 (repaint和reflow)
2013/04/12 Javascript
document.documentElement和document.body区别介绍
2013/09/16 Javascript
JSON.stringify转换JSON时日期时间不准确的解决方法
2014/08/08 Javascript
Node.js开源应用框架HapiJS介绍
2015/01/14 Javascript
使用ES6语法重构React代码详解
2017/05/09 Javascript
微信小程序获取手机号授权用户登录功能
2017/11/09 Javascript
JavaScript设计模式之建造者模式实例教程
2018/07/02 Javascript
用Python实现一个简单的线程池
2015/04/07 Python
对Python正则匹配IP、Url、Mail的方法详解
2018/12/25 Python
使用celery执行Django串行异步任务的方法步骤
2019/06/06 Python
pycharm中import呈现灰色原因的解决方法
2020/03/04 Python
高清屏下canvas重置尺寸引发的问题的解决
2019/10/14 HTML / CSS
SmartBuyGlasses台湾:名牌眼镜,名牌太阳眼镜及隐形眼镜
2017/01/04 全球购物
斯洛伐克家具和时尚装饰品购物网站:Butlers.sk
2019/09/08 全球购物
几个Linux面试题笔试题
2012/12/01 面试题
高中生期末评语
2014/01/28 职场文书
奥巴马开学演讲稿
2014/05/15 职场文书
在职证明书范本(2014新版)
2014/09/25 职场文书
高校自主招生自荐信2015
2015/03/04 职场文书
品牌形象定位,全面分析
2019/07/23 职场文书
PyCharm配置KBEngine快速处理代码提示冲突、配置命令问题
2021/04/03 Python
MySQL CHAR和VARCHAR该如何选择
2021/05/31 MySQL