用于使用命名常量枚举的自定义django字段

django-enumfield的Python项目详细描述


提供具有可重用枚举和转换验证的枚举django模型字段(使用integerfield)。

https://travis-ci.org/5monkeys/django-enumfield.svg?branch=masterhttps://img.shields.io/pypi/v/django-enumfield.svghttps://img.shields.io/pypi/l/django-enumfield.svghttps://img.shields.io/pypi/pyversions/django-enumfield.svghttps://img.shields.io/pypi/wheel/django-enumfield.svg

安装

目前,we testdjango版本1.8-2.1和python版本2.7,3.4-3.7。

在python环境中安装django-enumfield

$ pip install django-enumfield

对于1.8之前的django版本,请执行此操作

$ pip install django-enumfield==1.2.1

如果您正在寻找本机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将生成一个选择框,其中“男性”和“女性”作为性别字段的选项标签。

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

推荐PyPI第三方库


热门话题
javascript Jquery Ajax:无法分配给函数结果错误   java JavaFX组合框筛选列表错误   java如何检索根据其标记的帖子数量排序的收藏夹标记列表?   JavaFXJava FXML动态地将内容加载到多个不同的选项卡上   Java与C的压缩兼容性   打印格式Java   java我无法从充满Order对象的ArrayList打印   使用JPARepository保存新实体时引发InvalidDataAccessResourceUsageException:无法提取结果集   Android Studio Java runnable未运行   java Android Room问题使用适配器和循环查看器以多对多关系显示两个表中的数据   java无法执行目标组织。阿帕奇。专家插件:mavencompilerplugin:3.1:编译   反编译压缩在exe中的Java。在二进制流中找到zip文件吗?   java通过Maven使用Junit类别运行Cucumber测试   java如何通过if/else语句更改onClick函数?   Java方法一直给我:“找不到符号”   java如何在Android中用字符串\n换行(来自linux的输入)