django的真正python枚举。

django-choice-enumfields的Python项目详细描述


这个包允许您在django中使用真正的python(PEP435样式)枚举。

https://travis-ci.org/druids/django-choice-enumfields.svg?branch=master

安装

  1. pip install django-choice-enumfields

包括的工具

EnumField,NumenumField

fromenumfieldsimportEnumFieldfromenumfieldsimportChoiceEnum# Uses Ethan Furman's "enum34" backportclassColor(ChoiceEnum):RED='r'GREEN='g'BLUE='b'classMyModel(models.Model):color=EnumField(Color,max_length=1)

其他地方:

m=MyModel.objects.filter(color=Color.RED)

NumEnumField的工作原理相同,但是底层的存储机制是 一个IntegerField,而不是一个CharField

枚举子字段,numensubfield

fromenumfieldsimportEnumField,EnumSubFieldfromenumfieldsimportChoiceEnumclassColor(ChoiceEnum):RED='r'GREEN='g'BLUE='b'classColorType(ChoiceEnum):LIGHT=Choice('l','light',parents=(Color.RED,Color.BLUE))DARK=Choice('d','dark',parents=(Color.RED,Color.GREEN))TRANSPARENT=Choice('t','transparent',parents=(Color.GREEN))classMyModel(models.Model):color=EnumField(Color,max_length=1)color_type=EnumSubField('color',ColorType,max_length=1)MyModel(color=Color.RED,color_type=ColorType.LIGHT).full_clean()# OKMyModel(color=Color.RED,color_type=ColorType.TRANSPARENT).full_clean()# Raise ValidationError

EnumSubField自动验证是否满足父级要求。

使用EnumSubFieldEnumFieldNumEnumSubFieldNumEnumField 验证初始的和允许的选项之间的转换。

fromenumfieldsimportEnumFieldfromenumfieldsimportChoice,ChoiceEnumclassStateFlow(ChoiceEnum):START=Choice('s','start',next={'PROCESSING'})PROCESSING=Choice('p','processing',next={'END'},initial=False)END=Choice('e','end',next=set(),initial=False)classMyModel(models.Model):state=EnumField(StateFlow,max_length=1)MyModel(state=StateFlow.START).full_clean()# OK# Raise ValidationError because PROCESSING is not in initial statesMyModel(state=StateFlow.PROCESSING).full_clean()model=MyModel.objects.create(StateFlow.START)model.state=StateFlow.END# Raise ValidationError because END is not next state after STARTmodel.full_clean()model.state=StateFlow.PROCESSINGmodel.full_clean()# OK

表单中的用法

调用formfield方法直接在Form中使用EnumField

classMyForm(forms.Form):color=EnumField(Color,max_length=1).formfield()

选项枚举

通常,您只使用普通的PEP435样式的枚举,但是,django choice枚举字段 它还将自己的ChoiceEnum版本与一些额外的铃铛和口哨包在一起。 也就是说,在管理中使用的标签的智能定义 下拉列表。默认情况下,它将通过标题大小写常量来创建标签 名字。您可以使用选项定义枚举项来提供自定义标签

fromenumfieldsimportEnumField,ChoiceEnum,Choice# Our own Enum classclassColor(ChoiceEnum):RED=Choice('r','A custom label')GREEN='g'BLUE='b'classMyModel(models.Model):color=EnumField(Color,max_length=1)assertColor.GREEN.label=='Green'assertColor.RED.label=='A custom label'

EnumFieldListFilter

提供了enumfields.admin.EnumFieldListFilter以允许在中使用枚举 list_filter

fromenumfields.adminimportEnumFieldListFilterclassMyModelAdmin(admin.ModelAdmin):list_filter=[('color',EnumFieldListFilter)]

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何在构造函数外部添加鼠标侦听器   java如何使用比较器对列表进行排序以正确排序空值?   javajavax。由于javax,邮件“535.7.3身份验证失败”。邮件升级(v1.3.1至v1.5.2)   java将arraylist流到固定的二维数组中并打印?   RecyclerView适配器上的java上下文   java如何为此Twitter API为KafkaProducer建立连接   java Spring安全性重写WebSecurity配置适配器的配置(AuthenticationManagerBuilder)是否会影响全局应用程序?   线程“awteventque0”NullPointerException中的java异常   if条件中的null值和null指针异常java   java树集<Object>允许相同类型的多个对象   java定义类;我认不出   字符串java replaceAll()   JAVAutil。scanner(Java)读取文件时如何跳过空格?   java在swing中关闭flash屏幕   java在Wildfly 16中的应用程序中加载pk12文件   有没有工具可以自动生成屏幕抓取的Java代码   创建意图时,java方法getParcelableExtra()返回null   将数据从java传递到jsp   java Android Studio |永久保存布局