用于使用命名常量枚举的自定义django字段
django10-enumfield的Python项目详细描述
注意
django 1.10+的django枚举字段的克隆
提供具有可重用枚举和转换验证的枚举django模型字段(使用integerfield)。
安装
目前,we test在支持的django和python版本2.7、3.5上。
在python环境中安装django-enumfield:
$ pip install django-enumfield
使用django 1.9rc1进行测试时,请使用
$ pip install --pre django-enumfield==1.3b2
如果您正在寻找本机enum(或enum34)支持,请尝试测试 Pull Request #26计划用于django 1.10+。
用法
创建枚举类并将其作为第一个参数传递给django模型枚举字段。
fromdjango.dbimportmodelsfromdjango_enumfieldimportenumclassBeerStyle(enum.Enum):LAGER=0STOUT=1WEISSBIER=2classBeer(models.Model):style=enum.EnumField(BeerStyle,default=BeerStyle.LAGER)
Beer.objects.create(style=BeerStyle.STOUT)Beer.objects.filter(style=BeerStyle.STOUT)
您可以为枚举项使用自己的标签
classAnimals(enum.Enum):CAT=1DOG=2labels={CAT:'Cat',DOG:'Dog'}
枚举类提供了使用转换验证的可能性。
fromdjango.dbimportmodelsfromdjango_enumfieldimportenumclassPersonStatus(enum.Enum):ALIVE=1DEAD=2REANIMATED=3_transitions={DEAD:(ALIVE,),REANIMATED:(DEAD,)}classPerson(models.Model):status=enum.EnumField(PersonStatus)
这些转变表明,一个人只能从活着到死,从死到复活。
person=Person.objects.create(status=PersonStatus.ALIVE)try:person.status=PersonStatus.REANIMATEDperson.save()exceptInvalidStatusOperationError:print"Person status can not go from ALIVE to REANIMATED"
枚举类也可以在没有EnumField的情况下使用。这在django form choicefields中非常有用。
fromdjango.formsimportFormfromdjango_enumfieldimportenumclassGenderEnum(enum.Enum):MALE=1FEMALE=2labels={MALE:'Male',FEMALE:'Female',}classPersonForm(forms.Form)gender=forms.TypedChoiceField(choices=GenderEnum.choices(),coerce=int)
在模板中呈现personform将生成一个选择框,其中“男性”和“女性”作为性别字段的选项标签。