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

 更新时间:2020年07月15日 11:31:24   作者:tmpbook  
这篇文章主要介绍了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原生序列化,还是十分方便的

以上这篇django序列化时使用外键的真实值操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Python pandas找出、删除重复的数据实例

    Python pandas找出、删除重复的数据实例

    在面试中很可能遇到给定一个含有重复元素的列表,删除其中重复的元素,下面这篇文章主要给大家介绍了关于Python pandas找出、删除重复数据的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-07-07
  • Python datetime 格式化 明天,昨天实例

    Python datetime 格式化 明天,昨天实例

    这篇文章主要介绍了Python datetime 格式化 明天,昨天实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-03-03
  • 浅谈Python中的可迭代对象、迭代器、For循环工作机制、生成器

    浅谈Python中的可迭代对象、迭代器、For循环工作机制、生成器

    这篇文章主要介绍了Python中的可迭代对象、迭代器、For循环工作机制、生成器,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03
  • python在回调函数中获取返回值的方法

    python在回调函数中获取返回值的方法

    今天小编就为大家分享一篇python在回调函数中获取返回值的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-02-02
  • django使用LDAP验证的方法示例

    django使用LDAP验证的方法示例

    这篇文章主要介绍了django使用LDAP验证的方法示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-12-12
  • Python绘制股票移动均线的实例

    Python绘制股票移动均线的实例

    今天小编就为大家分享一篇Python绘制股票移动均线的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08
  • Python读取csv文件分隔符设置方法

    Python读取csv文件分隔符设置方法

    今天小编就为大家分享一篇Python读取csv文件分隔符设置方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-01-01
  • Python 遍历列表里面序号和值的方法(三种)

    Python 遍历列表里面序号和值的方法(三种)

    本文主要介绍了Python 列表(List)的三种遍历(序号和值)方法。具有很好的参考价值,下面跟着小编一起来看下吧
    2017-02-02
  • Python判断文本中消息重复次数的方法

    Python判断文本中消息重复次数的方法

    这篇文章主要介绍了Python判断文本中消息重复次数的方法,涉及Python针对文本文件的读取与字符串操作的相关技巧,需要的朋友可以参考下
    2016-04-04
  • Win7上搭建Cocos2d-x 3.1.1开发环境

    Win7上搭建Cocos2d-x 3.1.1开发环境

    现在,越来越多的公司采用Cocos2d-x 3.0来开发游戏了,但是现在这样的文章并不多,所以打算写一系列来帮助初学者快速掌握Cocos2d-x 3.0。首先就从开发环境的大家说起吧
    2014-07-07

最新评论