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.mzph.cn/news/815147.shtml

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

相关文章

图书管理系统!牛逼!

今天给大家分享一套基于SpringbootVue的图书管理系统源码,在实际项目中可以直接复用。(免费提供,文末自取) ​一、系统运行图(设计报告和接口文档) 1、登陆页面 2、后台页面 3、设计报告包含接口文档 二、系统搭建视频教程 源码…

12-LINUX--进程间的通信

进程间通信:采用IPC机制(进程间的用户空间相互独立,内核空间共享),有管道,信号量,共享内存,消息队列,套接字。 一.管道 管道可以用来在两个进程之间传递数据&#xff0c…

终端工具命令行颜色配置(解决终端工具连上服务器之后,无颜色问题)

本期主题: 讲解使用mobaxterm等终端工具连上服务器,但是命令行没有颜色的问题 目录 1. 问题描述2. 原因解释3.测试 1. 问题描述 使用终端工具(Mobaxterm等)连上服务器之后,发现终端工具没有颜色,如下图&am…

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

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

GPT4.5发布了?OpenAI终于发布正式版Turbo,重回AI王座第一

令人惊讶的是,短短三个月内,全球最强AI的称号又一次易主了!几个月前,Claude3 Opus的性能全面超过了GPT-4,全球网友纷纷转向Claude3,并分享了他们对Claude3的惊艳体验。然而,OpenAI最近再次展示了…

探索GlusterFS:开源分布式文件系统

目录 引言 一、GlusterFS简介 (一)基本介绍 (二)GlusterFS特点 (三)GlusterFS术语 (四)GlusterFS工作流程 二、GlusterFs的卷类型 (一)卷类型 &…

【免安装的MATLAB--MATLAB online】

目录: 前言账号的注册图片处理的示例准备图片脚本函数 总结 前言 在计算机、数学等相关专业中,或多或少都会与MATLAB产生藕断丝连的联系,如果你需要使用MATLAB,但是又不想要安装到自己的电脑上(它实在是太大了啊&#…

Linux 系统问题排查常用命令

立刻关机 haltcentos安装yum apt-get install yum查找文件夹 find / - name 需要查找文件名称vi里面 查找字符串 “/”,后面跟要查找的字符串,再按回车。vi将光标定位在该串下一次出现的地方上。键入n跳到该串的下一个出现处,键入N跳到该…

正则表达式 速成

正则表达式的作用 正则表达式,又称规则表达式,(Regular Expression,在代码中常简写为regex、regexp或RE),是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字…

c语言中<string.h>的strstr与strtok函数

c语言中string.h的strstr与strtok函数 代码运行结果 代码 #include <stdio.h> #include <string.h>///1.在字符串str1里面,查找第一次出现str2的位置 //char * strstr(const char * str1,const char * str2)///2.sep为分割符,根据分割符来对str进行分割 //char * …

解决Django中的UnicodeDecodeError问题

在使用Django进行Web开发时&#xff0c;有时会遇到一些由于编码不一致引起的问题&#xff0c;特别是在处理文件读写操作时。一个常见的错误是UnicodeDecodeError&#xff0c;其表现为gbk codec cant decode byte 0xa6 in position 9737: illegal multibyte sequence。这个问题通…

【设计模式学习】单例模式和工厂模式

꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好&#xff0c;我是xiaoxie.希望你看完之后,有不足之处请多多谅解&#xff0c;让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN 如需转…

【SpringBoot:详解Bean装配】

&#x1f3e1;Java码农探花&#xff1a; &#x1f525; 推荐专栏&#xff1a;<springboot学习> &#x1f6f8;学无止境&#xff0c;不骄不躁&#xff0c;知行合一 文章目录 前言一、IoC容器的简介BeanFactory接口源码二、Bean装配扫描装配探索启动类条件装配自定义Bean总…

版本管理|Git -目前最好的版本管理工具

文章目录 什么是版本为什么需要版本管理Git -目前最好的版本管理工具Git的关键特点和概念初始化Git保存代码改变git addgit commit -m ""git statusgit log branch分支管理git branch & git chekoutHEAD的本质git merge 合并fast forward merge 本地与远程如何解…

【一刷《剑指Offer》】面试题 3:二维数组中的查找

力扣对应题目链接&#xff1a;240. 搜索二维矩阵 II - 力扣&#xff08;LeetCode&#xff09; 核心考点&#xff1a;数组相关&#xff0c;特性观察&#xff0c;时间复杂度把握。 一、《剑指Offer》对应内容 二、分析题目 正常查找的过程本质就是排除的过程&#xff0c;谁排除…

【YOLOv9】完胜V8的SOTA模型Yolov9(论文阅读笔记)

官方论文地址&#xff1a; 论文地址点击即可跳转 官方代码地址&#xff1a; GitCode - 开发者的代码家园 官方代码地址点击即可跳转 1 总述 当输入数据经过各层的特征提取和变换的时候&#xff0c;都会丢失一定的信息。针对这一问题&#xff1a; 论文中提出的可编程梯度信息…

免费的 ChatGPT 网站(六个)

&#x1f525;博客主页&#xff1a; 小羊失眠啦. &#x1f3a5;系列专栏&#xff1a;《C语言》 《数据结构》 《C》 《Linux》 《Cpolar》 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 文章目录 一、insCode二、讯飞星火三、豆包四、文心一言五、通义千问六、360智脑 现在智能…

【漏洞复现】WordPress LayerSlider插件SQL注入漏洞复现

声明&#xff1a;亲爱的读者&#xff0c;我们诚挚地提醒您&#xff0c;Aniya网络安全的技术文章仅供个人研究学习参考。任何因传播或利用本实验室提供的信息而造成的直接或间接后果及损失&#xff0c;均由使用者自行承担责任。Aniya网络安全及作者对此概不负责。如有侵权&#…

C数据结构:双向链表(带头循环)

前言 链表分多种&#xff0c;分别为 不带头不循环单向链表、不带头循环单向链表、带头循环单向链表、带头不循环单向链表 不带头不循环双向链表、不带头循环双向链表、带头循环双向链表、带头不循环双向链表 一共八种 在前一篇博客中完成的单链表即为不带头不循环单向链表…

杰发科技AC7840——CAN通信简介(5)_可变波特率设置

0. 简介 设置可变波特率时候&#xff0c;遇到2个坑&#xff0c;在此记录下来 使用该函数即可 can_time_segment_t bitrate2 s_canBitrate[CAN_BITRATE_250K]; CAN_DRV_SetBitrate(instance, &bitrate2); 1. 波特率指针注意不要空 查看设置波特率的接口&#xff0c;发现…