当前位置: 首页 > news >正文

【Django 04】Serialization 序列化的高级使用

序列化器 serializers

序列化器的作用

序列化将 querysetinstance 转换为 json/xml/yaml 返回给前端
反序列化与序列化则相反

定义序列化器

定义类,继承自 Serializer

通常新建一个 serializers.py 文件 撰写序列化内容

suah as 目前只支持

read_only 只读

label 字段说明信息

max_length 最大长度

serializer.py

# 定义产品序列化器
from rest_framework.serializers import *
from .models import *# 产品分类序列化器
class GoodsCategorySerializer(ModelSerializer):class Meta:model = GoodsCategoryfields = ('name', 'remark')# 产品序列化器
class GoodsSerializer(ModelSerializer):# 外键字段相关的数据 需要单独序列化category = GoodsCategorySerializer()class Meta:model = Goods# 序列化单个字段fields = ('name',)# 序列化多个字段fields = ('name','number',)# 序列化所有字段fields = '__all__'

views.py

from django.shortcuts import render
from rest_framework.response import Response
from .models import *
from rest_framework.decorators import api_view
from django.shortcuts import get_object_or_404
from rest_framework.views import APIView
from .serializer import *class GetGoods(APIView):def get(self, request):data = Goods.objects.all()serializer = GoodsSerializer(instance=data, many=True)print(serializer.data)return Response(serializer.data)def post(self, request):# 从请求数据中提取字段request_data = {"category": request.data.get("Goodscategory"),"number": request.data.get("number"),"name": request.data.get("name"),"barcode": request.data.get("barcode"),"spec": request.data.get("spec"),"shelf_life_days": request.data.get("shelf_life_days"),"purchase_price": request.data.get("purchase_price"),"retail_price": request.data.get("retail_price"),"remark": request.data.get("remark"),}# 使用 create() 方法创建新的商品对象new_goods = Goods.objects.create(**request_data)# 对创建的对象进行序列化,并作为响应返回serializer = GoodsSerializer(instance=new_goods)return Response(serializer.data)

urls.py

from django.contrib import admin
from django.urls import path
from apps.erp_test.views import *urlpatterns = [path('admin/', admin.site.urls),path('filtergoodscategory/', FilterGoodsCategory),path('filtergoodscategoryapi/', FilterGoodsCategoryAPI.as_view()),path('getgoods/', GetGoods.as_view()),
]

a. 序列化单个对象

  • 获取对象 data = Goods.objects.get(id=1)

  • 创建序列化器 sberializer = GoodsSerializer(instance=data)

  • 转换数据 print(serializer.data)

  • 注意点:

    instance是一个参数,用于指定要序列化或反序列化的 Python 对象。具体来说,它是一个类实例(Class Instance),通常是指一个从数据库或其他数据源中检索出来的模型实例(Model Instance)。

    当我们需要将一个模型实例转换为 JSON 或其他格式时,可以使用 Django 的序列化器(Serializer)来实现。

  • 输出:

{"id": 1,"number": "1","name": "第一个产品","purchase_price": 100.0,"retail_price": 150.0,"remark": "测试产品"
}

b. 序列化多个对象

data = Goods.objects.all() # 获取对象# 创建序列化器,many表示序列化多个对象,默认为单个
serializer = GoodsSerializer(instance=data,many=True)print(serializer.data) # 转换数据# 输出:
[OrderedDict([('id', 1), ('number', '1'), ('name', '第一个产品'), ('purchase_price', 100.0), ('retail_price', 150.0), ('remark', '测试产品')]), OrderedDict([('id', 2), ('number', '123'), ('name', '产品2'), ('purchase_price', 123.0), ('retail_price', 4123.0), ('remark', '测试产品2')])]  

在这里插入图片描述

在这里插入图片描述

相关文章:

【Django 04】Serialization 序列化的高级使用

序列化器 serializers 序列化器的作用 序列化将 queryset 和 instance 转换为 json/xml/yaml 返回给前端 反序列化与序列化则相反 定义序列化器 定义类,继承自 Serializer 通常新建一个 serializers.py 文件 撰写序列化内容 suah as 目前只支持 read_only 只…...

【前端学习】—变量类型和计算(五)

【前端学习】—变量类型和计算(五) 一、JS中使用typeof能得到哪些类型 字符串(String):表示文本数据,用单引号或双引号括起来。 数字(Number):表示数值数据,包括整数和浮点数。 布尔值(Boolean):表示真或假(true或false)的逻辑值。 空值(Null):表示一个空…...

QT中窗口自绘制效果展示

项目中需要使用QT进行窗口自绘,前期先做一下技术探索,参考相关资料代码熟悉流程。本着代码是最好的老师原则,在此记录一下。 目录 1.运行效果 2.代码结构 3.具体代码 1.运行效果 2.代码结构 3.具体代码 myspeed.pro QT core gui…...

Android Studio 直接获取Spinner的值

最近做一个小demo 使用Spinner下拉框来让用户选择地区、周数(第1-12周) 然后参考了一下别人的文章 这里引用这位博主博文: AndroidStudio使用spinner控件并添加监听(极简)_安卓spinner监听事件_天王老子来了我也不…...

渗透测试工具(3)Burpsuite

笔记目录 渗透测试工具(1)wireshark渗透测试工具(2)Nmap渗透测试工具(3)Burpsuite 1.简介 是Web应用程序测试,请求的拦截和修改,扫描web应用程序漏洞,以暴力破解登陆表单,执行会话令牌等多种的随机性检查。 (1)模块介绍 ①Intercept:用于显示和修改Ht…...

大数据之LibrA数据库系统上下电管理

系统上电 操作场景 系统管理员进行例行维护停机后需要重新启动服务器与FusionInsight LibrA集群。如果安装双机Manager,上电后HA将确定主备管理节点。系统启动完成后需要启动依赖集群运行的上层业务。 对系统的影响 系统上电完成以前集群不可用。 前提条件 获…...

Node.js、Vue的安装与使用(Linux OS)

Vue的安装与使用(Linux OS) Node.js的安装Vue的安装Vue的使用 操作系统:Ubuntu 20.04 LTS Node.js的安装 安装Node.js Node.js官方下载地址 1.选择合适的系统架构(可通过uname -m查看)版本安装 2.下载文件为tar.xz格…...

SparkSQL入门

概述 两种模式 Spark on Hive: 语法是Spark SQL语法,实际上是在IDEA上编写java叠加SQL的代码。 Hive on Spark: 只是替换了Hadoop的MR,改为了Spark的计算引擎。 发展历史 RDD > DataFrame > DataSet: 都有惰性机制,遇…...

AC修炼计划(AtCoder Regular Contest 167)

传送门:AtCoder Regular Contest 167 - AtCoder 再次感谢樱雪喵大佬的题解,讲的很详细,Orz。 大佬的博客链接如下:Atcoder Regular Contest 167 - 樱雪喵 - 博客园 (cnblogs.com) 第一题很签到,就省略掉了。 第二题…...

暄桐四阶课程「自在行草」学习装备指南

在2011年,暄桐成立的最初,课程便是面向零基础的成年人设计的。在十余年的教学实践中,暄桐教室为同学们提供了一种系统、有趣、扎实,并可持续进阶的学习可能。许多同学都是在来到暄桐以后,才第一次拿起毛笔,…...

vue3 列表页开发【选择展示列】功能

目录 背景描述: 开发流程: 详细开发流程: 总结: 背景描述: 这个功能是基于之前写的 封装列表页 的功能继续写的,加了一个选择展示列的功能,可以随时控制表格里展示那些列的数据&#xf…...

uniapp——自定义组件插槽及使用

案例样式 自定义组件pageBox.vue <template><view><view class"bgColor" :style"{ height: bgHeight rpx }"></view><view class"main"><!-- 主要内容放这里 --><slot></slot></view>&…...

微信native-v3版支付对接流程及demo

1.将p12证书转为pem证书&#xff0c;得到商户私钥 openssl pkcs12 -in apiclient_cert.p12 -out apiclient_cert.pem -nodes 密码是&#xff1a;商户id 2.将获取到的apiclient_cert.pem证书&#xff0c;复制出这一块内容&#xff0c;其他的不要 3.下载这个工具包 https://gi…...

租用服务器后需要注意什么

租用服务器后需要注意什么 1、从IDC服务商中接收到服务器时&#xff0c;需要对服务器的各项性能进行测试确认&#xff0c;并做好记录以便对服务器的性能做到心中有数。 2、在服务器租用交接时&#xff0c;要了解服务器的安全设置情况&#xff0c;对服务器安全技术方面不了解的…...

【公众号开发】图像文字识别 · 模板消息推送 · 素材管理 · 带参数二维码的生成与事件的处理

【公众号开发】&#xff08;4&#xff09; 文章目录 【公众号开发】&#xff08;4&#xff09;1. 图像文字识别功能1.1 百度AI图像文字识别接口申请1.2 查看文档学习如何调用百度AI1.3 程序开发1.3.1 导入依赖&#xff1a;1.3.2 公众号发来post请求格式1.3.3 对image类型的消息…...

Linux---(三)基本指令大全

前提引入&#xff1a;历史上先出现的键盘还是鼠标&#xff1f; 答案&#xff1a;键盘 ✨所以刚开始的时候绝对没有图形化界面&#xff0c;因此操作系统刚开始兴起的时候绝对没有图形化界面&#xff0c;因为当时没有鼠标。 ✨因为没有图形化界面&#xff0c;只有键盘&#xff0c…...

基于selenium的pyse自动化测试框架

介绍&#xff1a; pyse基于selenium&#xff08;webdriver&#xff09;进行了简单的二次封装&#xff0c;比selenium所提供的方法操作更简洁。 特点&#xff1a; 默认使用CSS定位&#xff0c;同时支持多种定位方法&#xff08;id\name\class\link_text\xpath\css&#xff09;…...

【微服务 SpringCloudAlibaba】实用篇 · Nacos注册中心

微服务&#xff08;5&#xff09; 文章目录 微服务&#xff08;5&#xff09;1. 认识和安装Nacos2. 服务注册到nacos和拉取服务1&#xff09;引入依赖2&#xff09;配置nacos地址3&#xff09;重启 3. 服务分级存储模型3.1 给user-service配置集群3.2 同集群优先的负载均衡 4. …...

华为手机安卓扫描安装包apk在哪

1、在文件管理器里找&#xff0c;有的安装包没有搜索到2、在应用市场-我的-安装包管理&#xff0c;它会扫描整个手机&#xff0c;推荐...

IDEA 新版本设置菜单展开

使用了新版本的IDEA 新UI后&#xff0c;常用的file&#xff0c;view&#xff0c;菜单看不见了&#xff0c;不太适应&#xff0c;找了一下&#xff0c;有个配置可以修改。 打开settings里面把show main menu in a separate toolbar勾选上&#xff0c;应用保存就可以了...

支付宝沙箱验签踩坑记:Hutool JSONObject格式化参数设置不当引发的invalid-signature

支付宝沙箱验签失败深度解析&#xff1a;Hutool JSON格式化参数引发的隐形陷阱 当你在Java项目中集成支付宝支付功能时&#xff0c;是否遇到过这样的场景&#xff1a;本地测试一切正常&#xff0c;但一旦接入沙箱环境就频繁报错"invalid-signature"&#xff1f;这个问…...

华为防火墙双活链路部署避坑指南:IP-LINK和BFD到底该怎么选?

华为防火墙双活链路部署实战&#xff1a;IP-LINK与BFD技术选型深度解析 当企业网络架构面临双活链路部署时&#xff0c;华为防火墙的链路检测机制选择往往成为关键决策点。作为网络架构师&#xff0c;我们常常需要在IP-LINK和BFD两种主流方案间做出权衡——这不仅关乎网络稳定性…...

2026 Google Play开发者上架全攻略:提升审核通过率的10个关键技巧

2026年&#xff0c;Google Play审核上架应用的门槛已经不再只是“功能是否可用”。很多应用被拒&#xff0c;并不是单一原因&#xff0c;而是权限合规、元数据一致性、功能完整度以及开发环境稳定性等多个因素叠加的结果。这篇将从Google Play最新审核机制出发&#xff0c;拆解…...

三步解锁硬件隐藏性能:Universal x86 Tuning Utility完全指南

三步解锁硬件隐藏性能&#xff1a;Universal x86 Tuning Utility完全指南 【免费下载链接】Universal-x86-Tuning-Utility Unlock the full potential of your Intel/AMD based device. 项目地址: https://gitcode.com/gh_mirrors/un/Universal-x86-Tuning-Utility 你是…...

别再搞混了!OpenLayers中Feature与Layer的交互指南(附封装函数)

OpenLayers要素与图层交互实战&#xff1a;从原理到封装 当我们第一次在OpenLayers中创建地图应用时&#xff0c;最令人困惑的莫过于要素(Feature)、图层(Layer)和数据源(Source)这三者之间的关系。很多开发者都曾遇到过这样的场景&#xff1a;点击地图上的某个要素想要获取其所…...

机械转行自学嵌入式,我用正点原子IMX6ULL复刻了一个智能仓储项目(附完整代码)

机械工程师的嵌入式转型之路&#xff1a;基于IMX6ULL的智能仓储实战 记得第一次拿起电烙铁时&#xff0c;我的手抖得像筛糠——这和我熟悉的游标卡尺、数控机床完全是两个世界。作为在汽车制造厂做了五年机械设计的工程师&#xff0c;我从未想过有一天会对着电路板调试UART通信…...

多线程缓存性能优化与内存子系统深度解析

1. 多线程缓存性能的本质矛盾现代处理器设计中&#xff0c;缓存系统对性能的影响远超大多数程序员的想象。当我们把视线投向多线程环境时&#xff0c;缓存行为会呈现出一些反直觉的特性。以典型的Intel Core 2 Duo处理器为例&#xff0c;其每个核心拥有32KB L1数据缓存和4MB共享…...

鸣潮自动化工具ok-ww:5分钟搞定每日重复任务的终极解决方案

鸣潮自动化工具ok-ww&#xff1a;5分钟搞定每日重复任务的终极解决方案 【免费下载链接】ok-wuthering-waves 鸣潮 后台自动战斗 自动刷声骸 一键日常 Automation for Wuthering Waves 项目地址: https://gitcode.com/GitHub_Trending/ok/ok-wuthering-waves 你是否厌倦…...

从Qt信号槽的5种连接方式,聊聊Qt::QueuedConnection的设计哲学与适用场景

Qt信号槽的5种连接方式深度解析&#xff1a;从设计哲学到实战选择 在Qt框架中&#xff0c;信号与槽机制是其最引以为傲的核心特性之一。这种优雅的事件处理方式不仅简化了对象间的通信&#xff0c;更为多线程编程提供了安全可靠的解决方案。但你是否真正理解信号槽背后五种连接…...

Audiveris终极指南:5步轻松实现乐谱数字化,免费开源音乐识别神器

Audiveris终极指南&#xff1a;5步轻松实现乐谱数字化&#xff0c;免费开源音乐识别神器 【免费下载链接】audiveris Latest generation of Audiveris OMR engine 项目地址: https://gitcode.com/gh_mirrors/au/audiveris 想要将纸质乐谱快速转换为可编辑的数字格式吗&a…...