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序列化时使用外键的真实值操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Django REST Framework序列化外键获取外键的值方法

    需求:序列化外键,获取外键的除id之外的值 使用Django REST Framework虽然开发接口快速,但是如果想要获取到除外键id值之外的外键信息,直接继承serializers.ModelSerializer类,然后在fields中指定返回的字段是获取不到外键的其他值的,比如我现在需要外键的name属性值,下面就给大家介绍两种方法通过序列化外键来获取我们想要的外键的值. 这里有两个Model:问卷(Questionnaire):问题(Question).一张问卷中包含多个问题,问题通过外

  • Django 外键的使用方法详解

    一.描述 在利用django做网络开发的时候我们会遇到一个问题就是,我们建立了多张数据表,但是多张数据表中的内容是不一样的,但是之间有着联系比如: 我有两张表,一张是记录歌曲信息的内容,一张是对歌曲操作的内容(下载次数浏览次数),如果我在views中对下载次数进行一个排序,但是我不能只显示下载次数,我需要歌名的内容,此时我们就需要外键来完成这个工作. 歌曲的操作次数 歌曲信息 二.解决 由于在django中都是使用models.py文件来管理数据库,再通过views.py进行连接操作,最后用ur

  • 详解django的serializer序列化model几种方法

    序列化是将对象状态转换为可保持或传输的格式的过程.与序列化相对的是反序列化,它将流转换为对象.这两个过程结合起来,可以轻松地存储和传输数据 方法一:通过继承View类,重写get方法,获取商品的前是前十条数据,通过serialize序列化数据,返回数据响应. from django.views.generic import View from goods.models import Goods from django.core import serializers from django.htt

  • django Serializer序列化使用方法详解

    Serializer序列化器 定义Serializer 1. 定义方法 Django REST framework中的Serializer使用类来定义,须继承自rest_framework.serializers.Serializer. 例如,我们已有了一个数据库模型类BookInfo class BookInfo(models.Model): btitle = models.CharField(max_length=20, verbose_name='名称') bpub_date = mode

  • 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_versi

  • Django之Mode的外键自关联和引用未定义的Model方法

    Django Model的外键自关联 在django的model定义中,有时需要某个Field引用当前定义的Model,比如一个部门(Department)的Model,它有一个字段是上级部门(super_department),上级部门应该是一个外键并引用Model Department,即: class Department(models.Model): ''' some other filed ''' super_department = models.ForeignKey(Departm

  • Django外键(ForeignKey)操作以及related_name的作用详解

    之前已经写过一篇关于Django外键的文章,但是当时并没有介绍如何根据外键对数据的操作,也就是如何通过主表查询子表或者通过子表查询主表的信息 首先我定义了两个模型,一个是老师模型,一个是学生模型,一个老师对应多个学生,这个算是一个一对多的类型(如下图所示) 那么如果我们要想查询一个老师对应的学生有哪些,该如何操作呢? 首先我们先查询到老师的信息,在这里我们使用python shell 进行演示  ,输入命令python manage.py shell 进入python shell操作界面: 第一

  • jpa使用注解生成表时无外键问题及解决

    目录 jpa注解生成表时无外键 使用jpa自动建表不生成外键情况 情况1 情况2 jpa注解生成表时无外键 刚入手springboot时,在使用jpa实体注解生成表无外键.是因为jpa不知道使用何种Dialect创建,默认没有外键. 在配置文件加上 database-platform: org.hibernate.dialect.MySQL5InnoDBDialect 就好了. 使用jpa自动建表不生成外键情况 springboot项目搭配的jpa使用时候,有一对多的关系注解,那么自动会生成外键

  • 举例讲解Django中数据模型访问外键值的方法

    先设置一个关于书本(book)的数据模型: from django.db import models class Publisher(models.Model): name = models.CharField(max_length=30) address = models.CharField(max_length=50) city = models.CharField(max_length=60) state_province = models.CharField(max_length=30)

  • Django序列化组件Serializers使用详解

    目录 01.为什么要用序列化组件 02.序列化组件的基本使用 03.序列化组件常用字段 04.序列化组件is_valid.validated_data 05.序列化组件校验字段 06.序列化组件.create() and .update() 07.序列化组件ModelSerializer 08.序列化组件构造复杂的结构 09.序列化组件修改返回值to_representation.to_internal_value 本文主要系统性的讲解django rest framwork 序列化组件的使用,

  • Django模型序列化返回自然主键值示例代码

    场景 在设计表结构时,难免需要建立一些外键关联.例如这样两个模型: from django.db import models class Person(models.Model): username = models.CharField(max_length=100) birthdate = models.DateField() class Book(models.Model): name = models.CharField(max_length=100) author = models.Fo

  • 对Django外键关系的描述

    注:本文需要你有一定的数据库知识,本文的数据库语法使用mysql书写 Django中,跟外键有关的关系有三种,下面来一一介绍. OneToManyField 这种最好理解,说白了就是最普通的外键,看看下面两个模型: class GoodsType(models.Model): name = models.CharField(max_length=50) class GoodsMessage(models.Model): Title = models.CharField(max_length='1

  • MySQL使用外键实现级联删除与更新的方法

    本文实例讲述了MySQL使用外键实现级联删除与更新的方法.分享给大家供大家参考,具体如下: MySQL支持外键的存储引擎只有InnoDB,在创建外键的时候,要求父表必须有对应的索引,子表在创建外键的时候也会自动创建对应的索引.在创建索引的时候,可以指定在删除.更新父表时,对子表进行的相应操作,包括RESTRICT.NO ACTION.SET NULL和CASCADE.其中RESTRICT和NO ACTION相同,是指在子表有关联记录的情况下父表不能更新:CASCADE表示父表在更新或者删除时,更

随机推荐