展示:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
...
{
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
}
...
|
序列化时得到外键的真实值:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
...
{
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的真实值
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
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,要保证外键先序列化,如下依赖:
1
2
3
4
5
6
7
8
9
10
|
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你们有
用过吗?????????????
上代码:
1
2
3
4
5
6
7
|
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序列化时使用外键的真实值操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/tmpbook/article/details/47066883