django序列化时使用外键的真实值操作
作者:tmpbook 发布时间:2022-07-19 10:09:30
标签:django,序列化,外键,真实值
展示:
一般情况下序列化得到的外键的内容只是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原生序列化,还是十分方便的
来源:https://blog.csdn.net/tmpbook/article/details/47066883
0
投稿
猜你喜欢
- Win7或Windows server 2008中IIS7支持ASP+Access解决方法:1. 让IIS7支持ASPWin7或Window
- 一个很不错的效果,用键盘的箭头键控制一个漂亮的箭头!也许能给你启发,做出一款有趣的小游戏呢!运行代码框<html xmlns:v=&q
- Microsoft SQL Server 2000 能提供超大型系统所需的数据库服务。大型服务器可能有成千上万的用户同时连接到 SQL Se
- 在SQL查询中,关键词Like可提供模糊查询功能,它通常与通配符一起使用。1 Like条件适用数据库字段类型 &nbs
- 使用RS232串口线或者是RS232转USB的这一类的接口,会需要com口作为接口来进行输入输出调式,写了个脚本来控制COM口,用到了Pyt
- 阅读上一篇:javascript面向对象编程(一)[javascript模拟传统OOP]javascript是一种非常灵活的语言,它的灵活度
- 如下所示:import osos.system()os.popen().read().strip()#上面2种方法 是python 执行终端
- 本文实例讲述了python分析网页上所有超链接的方法。分享给大家供大家参考。具体实现方法如下:import urllib, htmllib,
- 本文讨论 MySQL 的备份和恢复机制,以及如何维护数据表,包括最主要的两种表类型:MyISAM 和 Innodb,文中设计的 MySQL
- 一个SELECT查询中的LIKE语句来执行这种查询,尽管这种方法可行,但对于全文查找而言,这是一种效率极端低下的方法,尤其在处理大量数据的时
- 本文实例讲述了Python基于最小二乘法实现曲线拟合。分享给大家供大家参考,具体如下:这里不手动实现最小二乘,调用scipy库中实现好的相关
- 问题你想定义跟actor模式中类似“actors”角色的任务解决方案actor模式是一种最古老的也是最简单的并行和分布式计算解决方案。 事实
- 随手google咗一下,基本上都用select实现非阻塞监听,但问题是,监听的是用select之后是不能像getchar()那样
- 今天我升级MYSQL到5.1的时候遇到的。写出来共享以下。1、[root@localhost mysql]# scripts/mysql_i
- 首先你要确定错误的原因: 让IE显示详细的出错信息: 菜单--工具--Internet选项--高级--显示友好的HTTP错误信息,去掉这个选
- 佛爷去了公司的年夜饭,我有点无聊就在公司 Coding 点东西玩玩,于是就有了这玩意。请允许我很猥·琐得将这个游戏称之为“是男人坚持 100
- 简单试用了一下IE8后,今天相对有时间点,对IE8、IE7、IE6、Firefox2.0.0.12做了简单的一些CSS HACK测
- mysql数据库没有增量备份的机制,当数据量太大的时候备份是一个很大的问题。还好mysql数据库提供了一种主从备份的机制,其实就是把主数据库
- 白天总是玩着不看书,这两晚却很神奇地因为睡不着起来看书,正则表达式。很好玩的东西。《Javascript 高级程序设计》是本好书,写得很系统
- 前言本文主要给大家介绍了关于python指定时间调用函数的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍:在前面的一