Django系列之Serializer的source参数使用、自定义序列化方法
数据准备
models.py
from django.contrib.auth.models import AbstractUser
from django.db import modelsclass Publish(models.Model):name = models.CharField(max_length=32)city = models.CharField(max_length=8)email = models.CharField(max_length=32)def __str__(self):return self.nameclass AuthorDetail(models.Model):birthday = models.DateField()telephone = models.BigIntegerField()addr = models.CharField(max_length=64)class Author(models.Model):name = models.CharField(max_length=32)age = models.IntegerField()gender = models.IntegerField(choices=(('1', '男'), ('0', '女')))ad = models.OneToOneField(AuthorDetail, on_delete=models.CASCADE, null=True)def __str__(self):return self.nameclass Book(models.Model):title = models.CharField(max_length=32)price = models.DecimalField(max_digits=5, decimal_places=2)pub_date = models.DateField()publish = models.ForeignKey(Publish, on_delete=models.CASCADE, null=True)authors = models.ManyToManyField(Author, db_table="book2author")def __str__(self):return self.title
serializers字段的source参数
使用默认的序列化器时,视图函数访问 具有choices参数 的字段或 一对一 或 一对多 或 多对多 字段时,返回的数据只有 id 值,就像下面这种方式,性别是0或1,居住地址是居住详情表中的id值:
[{"id": 1,"name": "阿明","age": 16,"gender": 1,"ad": 1},{"id": 3,"name": "阿美","age": 21,"gender": 0,"ad": 3}
]
对上面这些场景使用source参数:
-
get_xxx_display用于显示 choices 参数对应的文本信息。
serializers.pyclass AuthorSerializer(serializers.ModelSerializer): gender_txt = serializers.CharField(source='get_gender_display') # 使用get_xxx_displayclass Meta:model = Authorfields = "__all__"返回的结果:
[{"id": 1,"gender_txt": "男","name": "阿明","age": 16,"gender": "1","ad": 1},{"id": 2,"gender_txt": "男","name": "阿伟","age": 25,"gender": "1","ad": 2},{"id": 3,"gender_txt": "男","name": "阿华","age": 21,"gender": "1","ad": 3},{"id": 4,"gender_txt": "女","name": "阿美","age": 16,"gender": "0","ad": 4} ]注意:为什么添加了
source=get_xxx_display还是没有显示出对应文本信息?把choices=(('1', '男'), ('0', '女'))的 0 和 1 改成字符串形式再试试。当然,也可以在视图函数中,使用
obj.get_xxx.display()来获取choices文本值。>>> Author.objects.get(id=1).gender '1' >>> Author.objects.get(id=1).get_gender_display() '男' >>> -
显示
一对一或一对多或多对多字段对应的文本信息。
serializers.pyclass AuthorSerializer(serializers.ModelSerializer):gender_txt = serializers.CharField(source='get_gender_display')address_txt = serializers.CharField(source='ad.addr') # 支持连表查询class Meta:model = Authorfields = "__all__"返回的结果:
[{"id": 1,"gender_txt": "男","address_txt": "beijing","name": "阿明","age": 16,"gender": "1","ad": 1},{"id": 2,"gender_txt": "男","address_txt": "shanghai","name": "阿伟","age": 25,"gender": "1","ad": 2},{"id": 3,"gender_txt": "男","address_txt": "shanghai","name": "阿华","age": 21,"gender": "1","ad": 3},{"id": 4,"gender_txt": "女","address_txt": "guangzhou","name": "阿美","age": 16,"gender": "0","ad": 4} ] -
自定义序列化输出方法
class AuthorSerializer(serializers.ModelSerializer):gender_txt = serializers.CharField(source='get_gender_display')address_zidingyi = serializers.SerializerMethodField() # 自定义序列化方法, 会寻找并执行'get_xxx'的方法。def get_address_zidingyi(self, obj):return obj.ad.addrclass Meta:model = Authorfields = "__all__"返回的结果:
[{"id": 1,"gender_txt": "男","address_zidingyi": "beijing","name": "阿明","age": 16,"gender": "1","ad": 1},{"id": 2,"gender_txt": "男","address_zidingyi": "shanghai","name": "阿伟","age": 25,"gender": "1","ad": 2},{"id": 3,"gender_txt": "男","address_zidingyi": "shanghai","name": "阿华","age": 21,"gender": "1","ad": 3},{"id": 4,"gender_txt": "女","address_zidingyi": "guangzhou","name": "阿美","age": 16,"gender": "0","ad": 4} ]
相关文章:
Django系列之Serializer的source参数使用、自定义序列化方法
数据准备 models.py from django.contrib.auth.models import AbstractUser from django.db import modelsclass Publish(models.Model):name models.CharField(max_length32)city models.CharField(max_length8)email models.CharField(max_length32)def __str__(self):r…...
Java从入门到精通
Java从入门到精通 1. Java概述1.1 Java是什么1.2 为什么用Java1.3 Java能做什么1.4 Java技术体系平台2. Java快速入门2.1 Java开发环境的准备:JDK简介、安装、常用命令如何使用JavaJDK产品的发展史获取JDK如何验证能用javac和java其他常用命令行命令2.2 Java入门程序-HelloWor…...
电路布线问题动态规划详解(做题思路)
对于电路布线问题,想必学过动态规划的大家都很清除。今天就来讲解一下这个动态规划经典题目。 目录 问题描述输入分析最优子结构代码 问题描述 在一块电路板的上、下2端分别有n个接线柱。根据电路设计,要求用导 线(i,π(i))将上端接线柱与下端接线柱相…...
webpack 的 Loader 和 Plugin 的区别,常见的 loader 和 plugin 有哪些?
结论先行: 1、 Loader 和 Plugin 的区别 Loader 也叫做就是“加载器”,因为 webpack 原生只能解析 js 文件,而对于其他类型文件,则需要借助 loader。所以 loader 的作用就是实现对不同格式文件的解析和处理,例如把 E…...
云计算实战项目之---学之思在线考试系统
简介: 学之思开源考试系统是一款 java vue 的前后端分离的考试系统。主要优点是开发、部署简单快捷、界面设计友好、代码结构清晰。支持web端和微信小程序,能覆盖到pc机和手机等设备。 支持多种部署方式:集成部署、前后端分离部署、docker部…...
研究生学术与职业素养讲座MOOC---期末复习(1-15)
目录 单选题多选题填空题判断题 单选题 我国制造科学与技术与工业发达国家相比的阶段性差距不包括:人工成本高不属于面向产业的学科:哲学哪个国际前沿本讲未提:纳米技术早期的科学研究不分学科是以达芬奇为例说的待遇不是管理者与领导者的区…...
kube-prometheus-stack监控k8s1.24+ docker缺少图像
1.24 中 cAdvisor 指标中缺少图像、名称和容器标签 由于 Kubernetes 1.24 已经从 cadvisor 中删除了 docker 插件,因此虽然可以使用 cri-dockerd 来适配容器运行时,但 cadvisor 无法获取有关图像标签等 docker 容器信息。进而导致 grafana 很多图像无数据。解决方法为对 pro…...
【C/PTA——循环结构3】
C/PTA——循环结构3 7-1 二分法求多项式单根1.题目要求2.代码实现 7-2 循环-十进制转化1.题目要求2.代码实现 7-3 梅森数1.题目要求2.代码实现 7-4 单词长度1.题目要求2.代码实现 7-5 21循环-求和31.题目要求2.代码实现 7-6 21循环-金字塔1.题目要求2.代码实现 7-7 循环-杨辉三…...
MAC设备(M1)环境下编译安装openCV for Java
最近发现一个需求,可以用openCV来实现,碰巧又新买了mac笔记本,就打算利用业余时间安装下openCV。这里将主要步骤记录下,希望能帮助有需要的人。 1、准备编译环境 #查询编译opencv相关依赖 brew info opencv查询结果如下图所示&a…...
pytest中的pytest.ini
[pytest] filterwarnings ignore::DeprecationWarning addopts -v -s markers uat:1 smok:2 log_cli1 xfail_strict True filterwarnings ignore::DeprecationWarning 这个的功能就是 test_login.py::Test_login::test_login_correct_password PASSEDwarnings summary …...
C#通过TCP发送List<string>
using System; using System.IO; using System.Net.Sockets; using System.Text; using System.Collections.Generic;public static void SendList<string>(Stream stream, List<string> list) {// 将List<string>对象转换为字节数组byte[] data Encoding.U…...
Mactracker for mac(硬件信息查询工具)免费下载
想知道你电脑的信息吗?Mactracker Mac版是Macos上一款硬件信息查询工具,可以查询电脑中的硬件信息,还可以查看您使用软件的具体情况,苹果电脑产品和周边产品的信息,售价等等,让您对电脑有更多深刻的了解。 …...
MES管理系统中常规的生产建模有哪些
随着制造业的快速发展,MES生产管理系统已经成为了现代制造业不可或缺的核心系统。MES通过对生产过程进行建模,实现了生产过程的可视化、可控制和可优化,为企业提供了全方位的生产管理解决方案。本文将深化对MES管理系统及其主要生产模型的理解…...
电商API:淘宝京东拼多多1688多电商平台的商品销量库存信息获取
item_get 获得淘宝商品详情 获取APIkeyitem_get_pro 获得淘宝商品详情高级版item_review 获得淘宝商品评论item_fee 获得淘宝商品快递费用item_password 获得淘口令真实urlitem_list_updown 批量获得淘宝商品上下架时间seller_info 获得淘宝店铺详情item_search 按关键字搜索淘…...
EPLAN软件中的术语-主数据‘’技术分享
在EPLAN中,主数据(Master Data)这个词被经常、反复地提及,我曾经困惑了很长时间,不得要领。在EPLAN的帮助系统中,它列举了一部分内容,说这些这些就是主数据,但没有解释什么是主数据,除了上面这些…...
web应用程序、Django框架的学习
web应用程序 什么是web? Web应用程序是一种可以通过Web访问的应用程序,用户只需要有浏览器即可,不需要再安装其他软件 案例: 淘宝网、京东网、博客园、等都是基于web应用的程序 应用程序有两种模式C/S、B/S。C/S是客户端/服务器端程序,…...
【c++之设计模式】组合使用:抽象工厂模式与单例模式
简介 学以致用,使用抽象工厂及单例模式创建不同轿车及轿车装饰品。 代码 定义一个抽象工厂类来创建不同类型的轿车和轿车装饰品。抽象工厂类中具有创建不同类型轿车和轿车装饰品的纯虚方法。 abstractFactory.h #pragma once#include "Car.h" #inclu…...
Adobe Photoshop Elements 2024 v24.0 简体中文版 | 中文直装版
下载: http://dt1.8tupian.net/2/29913a53b500.pg3介绍:Photoshop Elements 2024(简称PSE即PS简化版)是一款定位在数码摄影领域的全新的图像处理软件,该软件包括了专业版的大多数特性,只有少量的简化选项,提供了调整颜…...
seata事务回滚引起的skywalking数据库存储空间剧增的问题排查
基本信息 产品名称:ATS3.0 问题分类:编码问题 环境类型:环境无关 问题现象 11月1日上午华润DBA收到数据库磁盘空间告警,检查后发现skywalking连接的mysql数据库占用空间从之前一直是比较稳定的,但是10月31日…...
数据库SQL
数据库&SQL 数据库基本概念数据库DataBase定义 数据库管理系统(DBMS)定义在JAVA项目中与数据库的结合数据库管理系统中常见的概念库与表的关系 SQL数据类型数字类型浮点类型字符类型TEXT类型日期类型 SQL语言的分类DDL:数据定义语言修改表结构的注意事项 DML:数据操作语言D…...
装饰模式(Decorator Pattern)重构java邮件发奖系统实战
前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...
遍历 Map 类型集合的方法汇总
1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...
全球首个30米分辨率湿地数据集(2000—2022)
数据简介 今天我们分享的数据是全球30米分辨率湿地数据集,包含8种湿地亚类,该数据以0.5X0.5的瓦片存储,我们整理了所有属于中国的瓦片名称与其对应省份,方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...
【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具
第2章 虚拟机性能监控,故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令:jps [options] [hostid] 功能:本地虚拟机进程显示进程ID(与ps相同),可同时显示主类&#x…...
用机器学习破解新能源领域的“弃风”难题
音乐发烧友深有体会,玩音乐的本质就是玩电网。火电声音偏暖,水电偏冷,风电偏空旷。至于太阳能发的电,则略显朦胧和单薄。 不知你是否有感觉,近两年家里的音响声音越来越冷,听起来越来越单薄? —…...
QT3D学习笔记——圆台、圆锥
类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体(对象或容器)QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质(定义颜色、反光等)QFirstPersonC…...
ZYNQ学习记录FPGA(一)ZYNQ简介
一、知识准备 1.一些术语,缩写和概念: 1)ZYNQ全称:ZYNQ7000 All Pgrammable SoC 2)SoC:system on chips(片上系统),对比集成电路的SoB(system on board) 3)ARM:处理器…...
第一篇:Liunx环境下搭建PaddlePaddle 3.0基础环境(Liunx Centos8.5安装Python3.10+pip3.10)
第一篇:Liunx环境下搭建PaddlePaddle 3.0基础环境(Liunx Centos8.5安装Python3.10pip3.10) 一:前言二:安装编译依赖二:安装Python3.10三:安装PIP3.10四:安装Paddlepaddle基础框架4.1…...
算法250609 高精度
加法 #include<stdio.h> #include<iostream> #include<string.h> #include<math.h> #include<algorithm> using namespace std; char input1[205]; char input2[205]; int main(){while(scanf("%s%s",input1,input2)!EOF){int a[205]…...
FTXUI::Dom 模块
DOM 模块定义了分层的 FTXUI::Element 树,可用于构建复杂的终端界面,支持响应终端尺寸变化。 namespace ftxui {...// 定义文档 定义布局盒子 Element document vbox({// 设置文本 设置加粗 设置文本颜色text("The window") | bold | color(…...
