gpt4 book ai didi

django序列化时使用外键的真实值操作

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 25 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章django序列化时使用外键的真实值操作由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

展示:

一般情况下序列化得到的外键的内容只是id:

?
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 。

最后此篇关于django序列化时使用外键的真实值操作的文章就讲到这里了,如果你想了解更多关于django序列化时使用外键的真实值操作的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com