enums for choices fields
Project description
py-enum
A python enum module for django choices fields.
前言
通过改造python3中的enum.py而来,主要变更有:
- 在支持python3的同时,增加了对python2的支持
- Django中choice选项直接使用枚举对象
安装
pip install py_enum
变更记录ChangeLog详见
基类ChoiceEnum
集成自改造后的Enum对象,用于创建枚举型常数的基类。
使用
# 导入
from py_enum import ChoiceEnum, unique
# 定义
class Color(ChoiceEnum):
RED = (1, '红色')
GREEN = (2, '绿色')
BLUE = (3, '蓝色', {'value': 'blue'})
@unique
class Status(ChoiceEnum):
PROCESSING = ('processing', '处理中')
APPROVED = ('approved', '已审批')
CANCELED = ('canceled', '已取消')
CLOSED = ('closed', '已关闭')
定义如上,按照KEY = (value, label, extra)
的形式进行定义,value定义的值;label是对值的描述;第三个参数是extra,额外信息,可以任意类型。
基础用法
print(Color.RED) # 1
type(Color.RED) # <enum 'Color'>
len(colors) == 3 # true
Color.RED in Color # true
1 in Color # true
0 not in Color # true
Color.get_label(Color.RED) # '红色'
Color.get_extra(Color.BLUE) # {'value': 'blue'}
for value, label in Color:
print(value, label) # 直接遍历value和label
# 1, '红色'
# 2, '绿色'
# 3, '蓝色'
枚举对象实例化
member = Color(Color.RED) # 或者 Color(1)
member.value == 1 # true
member.name == 'RED' # true
member.label == '红色' # true
member.option == (1, '红色') # true
member.extra == None # true,因为没有定义
# 以上几个属性无法修改,直接赋值会抛出AttributeError异常
member.value in Color
在Django中使用
from django.db import models
class ColorModel(models.Model):
color = models.IntegerField(verbose_name='颜色', choices=Color, default=Color.RED)
instance = ColorModel.objects.create()
assert instance.color == colors.RED
instance.color = colors.BLUE
instance.save()
在DRF中使用
from rest_framework import serializers
class ColorSerializer(serializers.Serializer):
color = serializers.ChoiceField(help_text='选择颜色', choices=Color, default=Color.RED)
s = ColorSerializer()
s = ColorSerializer(data={'status': status.CLOSED})
assert s.is_valid() is True
s = ColorSerializer(data={'status': 1})
assert s.is_valid() is True
s = ColorSerializer(data={'status': 0})
assert s.is_valid() is False # 值不在枚举定义范围内,校验不通过
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
py-enum-1.0.0.tar.gz
(11.3 kB
view hashes)