Django处理枚举(枚举模型)以及source的使用

在这里插入图片描述


Django处理枚举-枚举模型

  • 1、定义模型类、序列化器类
  • 2、对上面这些场景使用source参数
  • 3、支持连表查询
  • 4、自定义序列化输出方法
  • 5、案例5

1、定义模型类、序列化器类

定义模型类models.py;项目模型类、接口模型类、用例模型类

from django.db import modelsclass Test_Project(models.Model):name = models.CharField(help_text='项目名称', verbose_name='项目名称',max_length=60,unique=True)desc = models.TextField(help_text='项目描述', blank=True, null=True)create_time = models.DateTimeField(auto_now_add=True)update_time = models.DateTimeField(auto_now=True)class Meta:db_table = "t_test_project"verbose_name = "项目表"verbose_name_plural = verbose_nameordering = ['id']def __str__(self):return self.name

CHOICES = [('1', '项目接口'),('2', '外部接口')]
type = models.CharField(verbose_name='接口类型', help_text='接口类型', max_length=40,default='1', choices=CHOICES)

from django.db import modelsclass Test_Interface(models.Model):CHOICES = [('1', '项目接口'),('2', '外部接口')]name = models.CharField(help_text='接口名称', verbose_name='接口名称',max_length=60,unique=True)desc = models.TextField(help_text='接口描述', blank=True, null=True, default='描述')type = models.CharField(verbose_name='接口类型', help_text='接口类型',max_length=40,default='1', choices=CHOICES)project = models.ForeignKey(Test_Project, on_delete=models.CASCADE)playcount=models.IntegerField(help_text='访问量',verbose_name='访问量',default=0)commentcount = models.IntegerField(default=0, verbose_name='评论量')class Meta:db_table = 't_test_interface'verbose_name = "接口表"verbose_name_plural = verbose_nameordering = ['id']def __str__(self):return self.name
from django.db import modelsclass Test_Testcase(models.Model):name = models.CharField(help_text='用例名称', verbose_name='用例名称',max_length=60,unique=True)desc = models.TextField(help_text='用例名称', blank=True, null=True)create_time = models.DateTimeField(auto_now_add=True)update_time = models.DateTimeField(auto_now=True)interface = models.ForeignKey(Test_Interface, on_delete=models.CASCADE)class Meta:db_table = "t_test_testcase"verbose_name = "用例表"verbose_name_plural = verbose_nameordering = ['id']def __str__(self):return self.name

序列化器类设计

from rest_framework import serializersfrom ttest.models import Test_Project,Test_Interfaceclass TProjectSerializer(serializers.ModelSerializer):class Meta:model=Test_Projectfields='__all__'class TInterfaceSerializer(serializers.ModelSerializer):class Meta:model=Test_Interfacefields='__all__'

访问接口:前端展示的数据type:“1”
使用默认的序列化器时,视图函数访问 具有choices参数 的字段或 一对一 或 一对多 或 多对多 字段时,返回的数据只有 id 值,就像下面这种方式,性别是0或1
在这里插入图片描述

2、对上面这些场景使用source参数

get_xxx_display 用于显示 choices 参数对应的文本信息。

序列化器文件:serializers.py

class TProjectSerializer(serializers.ModelSerializer):class Meta:model=Test_Projectfields='__all__'class TInterfaceSerializer(serializers.ModelSerializer):type = serializers.ChoiceField(choices=Test_Interface.CHOICES,source="get_type_display",read_only=True)  # 设置source="get_属性_display"即可class Meta:model=Test_Interfacefields='__all__'

在这里插入图片描述

3、支持连表查询

project_create_time=serializers.CharField(source='project.create_time')

显示 一对一 或 一对多 或 多对多 字段对应的文本信息。支持连表查询

from rest_framework import serializers
from ttest.models import Test_Project,Test_Interfaceclass TProjectSerializer(serializers.ModelSerializer):class Meta:model=Test_Projectfields='__all__'class TInterfaceSerializer(serializers.ModelSerializer):type = serializers.ChoiceField(choices=Test_Interface.CHOICES,source="get_type_display",read_only=True)  # 设置source="get_属性_display"即可project_create_time=serializers.CharField(source='project.create_time')class Meta:model=Test_Interfacefields='__all__'

在这里插入图片描述

4、自定义序列化输出方法

自定义序列化输出方法,会寻找并执行’get_xxx’的方法。

from rest_framework import serializers
from ttest.models import Test_Project,Test_Interfaceclass TProjectSerializer(serializers.ModelSerializer):class Meta:model=Test_Projectfields='__all__'class TInterfaceSerializer(serializers.ModelSerializer):type = serializers.ChoiceField(choices=Test_Interface.CHOICES,source="get_type_display",read_only=True)  # 设置source="get_属性_display"即可project_create_time=serializers.CharField(source='project.create_time')name_zidingyi=serializers.SerializerMethodField()def get_name_zidingyi(self,obj):return obj.project.nameclass Meta:model=Test_Interfacefields='__all__'

在这里插入图片描述

5、案例5

序列化输出时改变前端输出的字段名称
在这里插入图片描述
在这里插入图片描述


在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/308602.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于Springboot的二手交易平台

基于SpringbootVue的二手交易平台的设计与实现 开发语言:Java数据库:MySQL技术:SpringbootMybatis工具:IDEA、Maven、Navicat 系统展示 用户登录页 首页 商品信息 商品求购 网站公告 留言反馈 个人中心 后台管理 后台首页 用户…

jupyter切换不同的内核(虚拟环境)(anaconda 24.1.2)

jupyter切换不同的内核(anaconda 24.1.2) 主要的两条命令: conda install ipykernel python -m ipykernel install --user --name 环境名称 anaconda的版本号 conda --version实例: 一、首先可以看到已经创…

springboot websocket 持续打印 pod 日志

springboot 整合 websocket 和 连接 k8s 集群的方式参考历史 Java 专栏文章 修改前端页面 <!DOCTYPE html> <html><head><meta charset"utf-8"><title>Java后端WebSocket的Tomcat实现</title><script type"text/javasc…

[Java、Android面试]_18_详解Handler机制 常见handler面试题(非常重要,非常高频!!)

本人今年参加了很多面试&#xff0c;也有幸拿到了一些大厂的offer&#xff0c;整理了众多面试资料&#xff0c;后续还会分享众多面试资料。 整理成了面试系列&#xff0c;由于时间有限&#xff0c;每天整理一点&#xff0c;后续会陆续分享出来&#xff0c;感兴趣的朋友可关注收…

ccf201509-3模板生成系统(list,map,字符串综合运用)

问题描述 成成最近在搭建一个网站&#xff0c;其中一些页面的部分内容来自数据库中不同的数据记录&#xff0c;但是页面的基本结构是相同的。例如&#xff0c;对于展示用户信息的页面&#xff0c;当用户为 Tom 时&#xff0c;网页的源代码是&#xff1a; 而当用户为 Jerry 时…

pytorch车牌识别

目录 使用pytorch库中CNN模型进行图像识别收集数据集定义CNN模型卷积层池化层全连接层 CNN模型代码使用模型 使用pytorch库中CNN模型进行图像识别 收集数据集 可以去找开源的数据集或者自己手做一个 最终整合成 类别分类的图片文件 定义CNN模型 卷积层 功能&#xff1a;提…

说说对WebSocket的理解?应用场景?

文章目录 一、是什么二、特点全双工二进制帧协议名握手优点 三、应用场景参考文献 一、是什么 WebSocket&#xff0c;是一种网络传输协议&#xff0c;位于OSI模型的应用层。可在单个TCP连接上进行全双工通信&#xff0c;能更好的节省服务器资源和带宽并达到实时通迅 客户端和…

uniapp小程序编译报错

说明 微信小程序编译每次都出现[ project.config.json 文件内容错误] project.config.json: libVersion 字段需为 string, 解决 找到manifest.json文件 添加&#xff1a;"libVersion": "latest"&#xff0c;重新编译即可。

FreeRTOS创建第一个程序

使用freeRTOS创建任务时使用如下函数 函数的参数 创建一个FreeRTOS任务点亮led灯实现led灯500毫秒翻转一次 具体的代码实现 #include "stm32f10x.h" // Device header #include "Delay.h" #include "freeRTOS.h" #include &quo…

(三)ffmpeg 解码流程以及函数介绍

一、视频解码流程 二、函数介绍 1.avformat_network_init 函数作用&#xff1a; 执行网络库的全局初始化。这是可选的&#xff0c;不再推荐。 此函数仅用于解决旧GnuTLS或OpenSSL库的线程安全问题。如果libavformat链接到这些库的较新版本&#xff0c;或者不使用它们&#…

阿里云微调chatglm3-6b---只有一个python解释器但gradio要求版本不兼容怎么办

安装LLAMA参考博文http://t.csdnimg.cn/6yYwG 在用LLAMA微调大模型的时候总是出现connected error out并且出现这样的界面 这是由于LLMA所要求的gradio版本>4.0.0,<4.2.0&#xff0c;然而chatglm3-6b要求的gradio版本需要gradio3.39.0才能显示出web_demo_gradio.py渲染…

【MATLAB源码-第36期】matlab基于BD,SVD,ZF,MMSE,MF,SLNR预编码的MIMO系统误码率分析。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 1. MIMO (多输入多输出)&#xff1a;这是一个无线通信系统中使用的技术&#xff0c;其中有多个发送和接收天线。通过同时发送和接收多个数据流&#xff0c;MIMO可以增加数据速率和系统容量&#xff0c;同时提高信号的可靠性。…

Mac环境 llamafile 部署大语言模型LLM

文章目录 Github官网本地部署 llamafile 是一种可在你自己的电脑上运行的可执行大型语言模型&#xff08;LLM&#xff09;&#xff0c;它包含了给定的开放 LLM 的权重&#xff0c;以及运行该模型所需的一切。让人惊喜的是&#xff0c;你无需进行任何安装或配置。 Github https…

爱奇艺APP Android低端机性能优化

01 背景介绍 在智能手机市场上&#xff0c;高端机型经常备受瞩目&#xff0c;但低端机型亦占据了不可忽视的份额。众多厂商为满足低端市场的需求&#xff0c;不断推出低配系列手机。另外过去几年的中高端机型&#xff0c;随着系统硬件的快速迭代&#xff0c;现已经被归类为低端…

APP开发_开发一个入门的 H5 APP

1 开发环境的搭建与准备 1.1 安装 Android Studio 下载&#xff1a;首先&#xff0c;从谷歌的安卓开发者网站&#xff08;https://developer.android.google.cn/studio/releases?hlzh-cn&#xff09;下载Android Studio的安装包。在下载页面中&#xff0c;可以根据自己的操作…

智慧公厕是智慧城市建设中不可或缺的一部分

智慧城市的数字化转型正在取得显著成效&#xff0c;各项基础设施的建设也在迅速发展&#xff0c;其中智慧公厕成为了智慧城市体系中不可或缺的一部分。作为社会生活中必要的设施&#xff0c;公共厕所的信息化、数字化、智慧化升级转型能够实现全区域公共厕所管理的横向打通和纵…

asp.net core 网页接入微信扫码登录

创建微信开放平台账号&#xff0c;然后创建网页应用 获取appid和appsecret 前端使用的vue&#xff0c;安装插件vue-wxlogin 调用代码 <wxlogin :appid"appId" :scope"scope" :redirect_uri"redirect_uri"></wxlogin> <scri…

【数据结构】树与二叉树遍历算法的应用(求叶子节点个数、求树高、复制二叉树、创建二叉树、二叉树存放表达式、交换二叉树每个结点的左右孩子)

目录 求叶子节点个数、求树高、复制二叉树、创建二叉树、二叉树存放表达式、交换二叉树每个结点的左右孩子应用一&#xff1a;统计二叉树中叶子结点个数的算法写法一&#xff1a;使用静态变量写法二&#xff1a;传入 count 作为参数写法三&#xff1a;不使用额外变量 应用二&am…

Python学习从0到1 day25 第二阶段 SQL ② Python操作数据库

少年有梦&#xff0c;不应至于心动&#xff0c;更要付诸行动 —— 24.4.12 pymysql 除了使用图形化工具以外&#xff0c;我们也可以使用编程语言来执行SQL从而操作数据库 在Python中&#xff0c;使用第三方库&#xff1a;pymysql来完成对MySQl数据库的操作 安装 pip install py…

什么是面向对象思想?

面向对象不是一种技术&#xff0c;而是一种思想。它指导我们以什么形式组织代码&#xff0c;以什么思路解决问题。 面向对象编程&#xff0c;是一种通过对象方式&#xff0c;把现实世界映射到计算机世界的编程方法。 面向对象解决问题的思路&#xff1a;把构成问题的事物分解成…