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的真实值
classModuleManager(models.Manager):
defget_by_natural_key(self,name,description):
returnself.get(name=name,description=description)
classModule(models.Model):
objects=ModuleManager()
name=models.CharField(max_length=100,unique=True)
description=models.CharField(max_length=100,blank=True,null=True)
#natual_key的序列化
defnatural_key(self):
return(self.name,self.description)
#natual_keys的解序列化
classMeta:
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,要保证外键先序列化,如下依赖:
classContent(models.Model):
name=models.CharField(max_length=100)
...
module=models.ManyToManyField('Module')
defnatural_key(self):
return(self.name,)+self.module.natural_key()
#和"def"同缩进
natural_key.dependencies=['example_app.module']
补充知识:django原生的序列化serialize解析
在写接口的时候,大家都离不开对query结果集的序列化
嗯嗯嗯,一般我们都有DRF里面的序列化工具,但是django原生的serialize你们有
用过吗?????????????
上代码:
fromdjango.core.serializersimportserialize
classTest(APIView):
defget(self,request):
origin_data=Test.objects.all()
serialized_data=serialize('json',origin_data)
returnHttpResponse(serialized_data)
当然,再有更便捷的工具的情况下,这种方法并不常用
在有特定需要的时候,使用这种django原生序列化,还是十分方便的
以上这篇django序列化时使用外键的真实值操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。