django序列化时使用外键的真实值操作
作者:tmpbook 时间:2022-07-19 10:09:30
展示:
一般情况下序列化得到的外键的内容只是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
标签:django,序列化,外键,真实值
0
投稿
猜你喜欢
tensorflow实现softma识别MNIST
2021-02-17 22:32:56
JS实现页面滚动到关闭时的位置与不滚动效果
2024-04-10 10:47:56
go语言发送smtp邮件的实现示例
2023-06-20 06:59:14
mysql备份脚本并保留7天
2024-01-13 03:10:34
Python中导入模块的几种方式总结
2023-08-04 17:03:54
简述:我为什么选择Python而不是Matlab和R语言
2021-05-13 06:51:27
PHP调用全国天气预报数据接口查询天气示例
2023-11-14 03:11:49
python递归删除指定目录及其所有内容的方法
2022-12-12 02:42:51
用Python识别人脸,人种等各种信息
2023-12-22 08:22:17
python3 scrapy框架的执行流程
2022-04-12 08:53:35
用FSO操作 xml
2008-09-03 12:26:00
MySQL无法创建外键的原因及解决方法
2024-01-17 00:00:07
python异常中else的实例用法
2021-02-05 06:18:56
zabbix进行数据库备份以及表分区的方法
2024-01-16 13:01:46
初探TensorFLow从文件读取图片的四种方式
2021-08-06 06:04:34
python使用time、datetime返回工作日列表实例代码
2022-03-21 14:02:15
Python虚拟环境virtualenv创建及使用过程图解
2023-05-18 10:57:22
BootStrap的select2既可以查询又可以输入的实现代码
2024-04-28 10:18:41
利用Python实现模拟登录知乎
2023-09-23 08:32:15
基于Python制作一个汇率换算程序
2022-05-25 20:33:25