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

 更新时间:2024年04月15日 09:12:09   作者:敲代码敲到头发茂密  
本文主要介绍了Django处理枚举(枚举模型)及source的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

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

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

from django.db import models

class 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_name
        ordering = ['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 models

class 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_name
        ordering = ['id']

    def __str__(self):
        return self.name

from django.db import models

class 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_name
        ordering = ['id']

    def __str__(self):
        return self.name

序列化器类设计

from rest_framework import serializers

from ttest.models import Test_Project,Test_Interface


class TProjectSerializer(serializers.ModelSerializer):

    class Meta:
        model=Test_Project
        fields='__all__'


class TInterfaceSerializer(serializers.ModelSerializer):
    class Meta:
        model=Test_Interface
        fields='__all__'

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

在这里插入图片描述

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

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

序列化器文件:serializers.py

class TProjectSerializer(serializers.ModelSerializer):

    class Meta:
        model=Test_Project
        fields='__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_Interface
        fields='__all__'

在这里插入图片描述

3、支持连表查询

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

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

from rest_framework import serializers
from ttest.models import Test_Project,Test_Interface


class TProjectSerializer(serializers.ModelSerializer):

    class Meta:
        model=Test_Project
        fields='__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_Interface
        fields='__all__'

在这里插入图片描述

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

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

from rest_framework import serializers
from ttest.models import Test_Project,Test_Interface


class TProjectSerializer(serializers.ModelSerializer):

    class Meta:
        model=Test_Project
        fields='__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.name

    class Meta:
        model=Test_Interface
        fields='__all__'

在这里插入图片描述

5、案例5

序列化输出时改变前端输出的字段名称

在这里插入图片描述

在这里插入图片描述

到此这篇关于Django处理枚举(枚举模型)及source的使用的文章就介绍到这了,更多相关Django 枚举及source内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

相关文章

  • Python 冷门魔术方法小结

    Python 冷门魔术方法小结

    本文主要介绍了Python 冷门魔术方法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-04-04
  • 使用Python绘制动态爱心并表白的代码详解

    使用Python绘制动态爱心并表白的代码详解

    在这个充满浪漫的季节,如何用代码表达你的爱意呢?今天我们将使用 Python 的 matplotlib 和 numpy 库绘制一个动态的爱心,并且在爱心上添加表白的文字,这将是一个独特而浪漫的方式来表达你的心声,感兴趣的小伙伴跟着小编来看看吧
    2025-04-04
  • Python中给字典排序的四种方法

    Python中给字典排序的四种方法

    我们经常在计算机等级考试中遇到词频排序的问题,我们一般先通过生成字典的方法,统计词的频次,然后给字典排序,那么如何快速地给字典按照键值进行排序呢,本文主要介绍了Python中给字典排序的四种方法,感兴趣的可以了解一下
    2023-08-08
  • python opencv图像处理基本操作示例详解

    python opencv图像处理基本操作示例详解

    这篇文章主要为大家介绍了python opencv图像处理的基本操作示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2021-11-11
  • 收集的几个Python小技巧分享

    收集的几个Python小技巧分享

    这篇文章主要介绍了收集的几个Python小技巧分享,如获得当前机器的名字、获取当前工作路径、获取系统的临时目录等,需要的朋友可以参考下
    2014-11-11
  • Django数据库连接丢失问题的解决方法

    Django数据库连接丢失问题的解决方法

    这篇文章主要介绍了Django数据库连接丢失问题的解决方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-12-12
  • Python Pandas describe()函数的使用详解

    Python Pandas describe()函数的使用详解

    pandas库中的describe()函数为我们提供了这样的功能,它可以快速生成数据集的描述性统计信息,这篇文章主要介绍了Python Pandas describe()函数的使用介绍,需要的朋友可以参考下
    2024-05-05
  • django实现用户注册实例讲解

    django实现用户注册实例讲解

    在本篇文章里小编给大家整理的是关于django用户注册的相关实例内容,有兴趣的朋友们学习下。
    2019-10-10
  • python实现简易内存监控

    python实现简易内存监控

    这篇文章主要介绍了python实现简易内存监控,每隔3秒获取系统内存,当内存超过设定的警报值时,获取所有进程占用内存并发出警报声,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-06-06
  • 解决pyPdf和pyPdf2在合并pdf时出现异常的问题

    解决pyPdf和pyPdf2在合并pdf时出现异常的问题

    这篇文章主要介绍了解决pyPdf和pyPdf2在合并pdf时出现异常的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-04-04

最新评论