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

关于Django 模型字段 `choices`自定义数据类型的枚举——补充

文章目录

    • 1. 处理 `datetime` 类型的 `choices`
    • 2. 处理 `time` 类型的 `choices`
    • 3. 处理 `Decimal` 类型的 `choices`
    • 4. 处理 `UUID` 类型的 `choices`
    • 5. 处理 `float` 类型的 `choices`

Choices 类的基础上扩展,可以将 choices 与特定数据类型(如 datedatetime)结合,适合需要特定类型支持的场景,如日期 date

import datetimeclass MoonLandings(datetime.date, models.Choices):APOLLO_11 = 1969, 7, 20, "Apollo 11 (Eagle)"APOLLO_12 = 1969, 11, 19, "Apollo 12 (Intrepid)"

类似的方式还可以应用于处理其他特定数据类型,例如 datetimetimeDecimalUUID 等。以下是一些常见数据类型的示例:

1. 处理 datetime 类型的 choices

假设我们需要记录一些重要的时间点,可以使用 datetime.datetimemodels.Choices 来定义这些选择:

import datetime
from django.db import modelsclass ImportantMoments(datetime.datetime, models.Choices):NEW_YEAR = 2024, 1, 1, 0, 0, 0, "New Year 2024"SUMMER_SOLSTICE = 2024, 6, 21, 12, 0, 0, "Summer Solstice 2024"WINTER_SOLSTICE = 2024, 12, 21, 12, 0, 0, "Winter Solstice 2024"class Event(models.Model):moment = models.DateTimeField(choices=ImportantMoments.choices)

这里的 moment 字段的可选项是特定的 datetime 值,比如“2024 年的新年”等。这样我们可以确保用户只能选择预定义的时间点。

2. 处理 time 类型的 choices

如果需要记录某些特定的时间(比如营业时间、特殊的时刻),可以用 datetime.timemodels.Choices

import datetime
from django.db import modelsclass BusinessHours(datetime.time, models.Choices):OPENING = 9, 0, 0, "Opening Time"CLOSING = 18, 0, 0, "Closing Time"LUNCH_BREAK = 12, 0, 0, "Lunch Break"class Store(models.Model):operation_time = models.TimeField(choices=BusinessHours.choices)

在这个例子中,operation_time 字段的可选值只能是 BusinessHours 定义的几个特定时刻,比如开门时间、关门时间和午休时间。

3. 处理 Decimal 类型的 choices

有时我们需要记录固定的金额,可以用 Decimalmodels.Choices。例如,对于定价的选择,可以使用 Decimal 来精确表示金额。

from decimal import Decimal
from django.db import modelsclass FixedPrices(Decimal, models.Choices):BUDGET = Decimal("9.99"), "Budget Option"STANDARD = Decimal("19.99"), "Standard Option"PREMIUM = Decimal("29.99"), "Premium Option"class Product(models.Model):price = models.DecimalField(max_digits=5, decimal_places=2, choices=FixedPrices.choices)

在这里,price 字段的选项是特定的价格,比如“预算选项”、“标准选项”等,可以确保用户只能选择固定的金额。

4. 处理 UUID 类型的 choices

如果使用 UUID 来标识某些特定的设备或版本,我们可以用 uuid.UUIDmodels.Choices。例如,在记录设备时,指定唯一的 UUID 作为选项:

import uuid
from django.db import modelsclass KnownDevices(uuid.UUID, models.Choices):DEVICE_A = uuid.UUID("123e4567-e89b-12d3-a456-426614174000"), "Device A"DEVICE_B = uuid.UUID("123e4567-e89b-12d3-a456-426614174001"), "Device B"DEVICE_C = uuid.UUID("123e4567-e89b-12d3-a456-426614174002"), "Device C"class Device(models.Model):device_id = models.UUIDField(choices=KnownDevices.choices)

这样可以确保 device_id 字段只能是已知设备的 UUID

5. 处理 float 类型的 choices

在某些情况下,如果我们需要用浮点数记录物理常量(比如π值的不同精度),可以使用 float 类型。

from django.db import modelsclass PiValues(float, models.Choices):LOW_PRECISION = 3.14, "Low Precision Pi"MEDIUM_PRECISION = 3.14159, "Medium Precision Pi"HIGH_PRECISION = 3.1415926535, "High Precision Pi"class Measurement(models.Model):pi_value = models.FloatField(choices=PiValues.choices)

通过这种方法,pi_value 字段仅限于选择特定精度的 π 值。

http://www.lryc.cn/news/479810.html

相关文章:

  • CAP理论的延申--BASE理论
  • 【傻呱呱】phpMyAdmin怎样给特定用户授权特定数据库权限?
  • 『VUE』21. 组件注册(详细图文注释)
  • 如何产看SQL 查询的执行时间
  • 计算机网络——路由器构成
  • 架构师之路-学渣到学霸历程-48
  • HappyChart——一款简单好用的专业绘图软件
  • 【Linux】进程信号全攻略(二)
  • redis用法(二)
  • Python-利用os,tkinter库编写一个伪恶意程序文件(Pro版)
  • Oracle视频基础1.4.4练习
  • GOF的C++软件设计模式的分类和模式名称
  • 有向图的完全可达性(有向图搜索全路径的问题) C#DFs
  • 前端开发实现自定义勾选/自定义样式,可复选,可取消勾选
  • 鸿蒙-promptAction.showToast基于PC屏幕底部提示
  • Vert.x,应用监控 - 全链路跟踪,基于Zipkin
  • Rust常用数据结构教程 序列
  • 智慧城市路面垃圾识别系统产品介绍方案
  • 网络安全:构建坚固的数字堡垒
  • LeetCode题练习与总结:打乱数组--384
  • 科技改变生活:最新智能开关、调光器及插座产品亮相
  • 传统RAG流程;密集检索器,稀疏检索器:中文的M3E
  • 基于统计方法的语言模型
  • Flux comfyui 部署笔记,整合包下载
  • 高性能分布式缓存Redis-数据管理与性能提升之道
  • BO-CNN-LSTM回归预测 | MATLAB实现BO-CNN-LSTM贝叶斯优化卷积神经网络-长短期记忆网络多输入单输出回归预测
  • DataWind将字符串数组拆出多行的方法
  • try...catch 和then...catch的异同点分析
  • Mit6.S081-实验环境搭建
  • 以太网交换安全:MAC地址漂移