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

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


在这里插入图片描述

相关推荐

  1. mybatis 以及plus 处理

    2024-04-15 08:34:03       36 阅读
  2. 【TypeScript简介以及使用方法】

    2024-04-15 08:34:03       32 阅读
  3. 模拟

    2024-04-15 08:34:03       49 阅读
  4. C++

    2024-04-15 08:34:03       29 阅读
  5. Django类型数据

    2024-04-15 08:34:03       37 阅读
  6. flutter中使用

    2024-04-15 08:34:03       61 阅读
  7. 使用场景

    2024-04-15 08:34:03       36 阅读
  8. C# 定义及使用

    2024-04-15 08:34:03       28 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-15 08:34:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-15 08:34:03       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-15 08:34:03       87 阅读
  4. Python语言-面向对象

    2024-04-15 08:34:03       96 阅读

热门阅读

  1. 批量clone某个github用户的所有项目

    2024-04-15 08:34:03       41 阅读
  2. go并发编程以及socket通信的理解

    2024-04-15 08:34:03       35 阅读
  3. npm vs. pnpm vs. Yarn: 三者之间的区别与比较

    2024-04-15 08:34:03       39 阅读
  4. 数据可视化开发教程和案例

    2024-04-15 08:34:03       40 阅读
  5. vue3+ts实现表格单元格编辑功能

    2024-04-15 08:34:03       28 阅读
  6. 关于分布式session的问题

    2024-04-15 08:34:03       23 阅读
  7. TLC3702双微功耗电压比较器

    2024-04-15 08:34:03       39 阅读