枚举类输出 django 的 choices 数据

发布时间 2023-06-22 07:55:03作者: 守望人间

枚举类输出 django 的 choices 数据

在 django 项目的 models 中难免会使用 choices,例如用户的状态等。而在其他地方需要筛选用户时,使用枚举类型更加直观方便,为了统一管理,希望只定义一个枚举类型。

定义枚举

from enum import Enum


class EnumBase(Enum):
    """枚举基类"""
    def __new__(cls, *args):
        """将定义的属性拆分,不影响 value 的正常使用"""
        obj = object.__new__(cls)
        if len(args) > 1:
            obj._value_ = args[0]  # 实际值还是给 value 使用
            obj.des = args[1]
        else:
            obj._value_ = args[0]
        return obj

    @classmethod
    def to_tuple(cls):
        return tuple([(_.value, _.des) for _ in cls])


class UserStatus(EnumBase):
    """用户状态"""
    # 为了在 django 的 choices 中使用,属性值为一个元组
    REGISTER = (0, '待审核')
    NORMAL = (1, '正常')
    DISABLE = (2, '不可用')
    DELETE = (3, '删除')

可以直接通过UserStatus.to_tuple()获取到 choices 值,并且也可以正常使用UserStatus.NORMAL.value获取属性值1