python的django枚举库。
django-richenum的Python项目详细描述
关于
richenum对python的django扩展。如果您不熟悉richenum,请在使用django richenum之前阅读它们(请参见Related Packages)。
模型字段
- 索引字段
- 将int存储在db中,但在python中公开orderedrichenumvalues。
- 规范名称字段
- 将varchar存储在db中,但在python中公开richenumvalues。 我们建议您使用indexenumfield来提高存储和查询效率。
- 松弛指数
- 与indexenumfield类似,但也允许在规范名称之间进行强制转换。 主要用于帮助将使用字符串的现有代码迁移为数据库值。
表单域
- 规范化字段
- 使用richenum/orderedrichenum规范名称作为表单字段值。
- 索引字段
- 使用orderedrichenum索引作为表单字段值。
Django管理
- RichEnumFieldListFilter
- 启用django管理用户界面中的按richenum模型字段筛选
安装
$ pip install django-richenum
示例用法
索引字段
>>>fromrichenumimportOrderedRichEnum,OrderedRichEnumValue>>>classMyOrderedRichEnum(OrderedRichEnum):...FOO=OrderedRichEnumValue(index=1,canonical_name="foo",display_name="Foo")...BAR=OrderedRichEnumValue(index=2,canonical_name="bar",display_name="Bar")...>>>fromdjango.dbimportmodels>>>fromdjango_richenum.modelsimportIndexEnumField>>>classMyModel(models.Model):...my_enum=IndexEnumField(MyOrderedRichEnum,default=MyOrderedRichEnum.FOO)...>>>m=MyModel.objects.create(my_enum=MyOrderedRichEnum.BAR)>>>m.save()>>>m.my_enumOrderedRichEnumValue-idx:2canonical_name:'bar'display_name:'Bar'>>>MyModel.objects.filter(my_enum=MyOrderedRichEnum.BAR)
规范名称字段
>>>fromrichenumimportRichEnum,RichEnumValue>>>classMyRichEnum(RichEnum):...FOO=RichEnumValue(canonical_name="foo",display_name="Foo")...BAR=RichEnumValue(canonical_name="bar",display_name="Bar")...>>>fromdjango.dbimportmodels>>>fromdjango_richenum.modelsimportCanonicalNameEnumField>>>classMyModel(models.Model):...my_enum=CanonicalNameEnumField(MyRichEnum,default=MyRichEnum.FOO)...>>>m=MyModel.objects.create(my_enum=MyRichEnum.BAR)>>>m.save()>>>m.my_enumRichEnumValue-canonical_name:'bar'display_name:'Bar'>>>MyModel.objects.filter(my_enum=MyRichEnum.BAR)
richenumfieldlistfilter
>>>fromdjango_richenum.adminimportregister_admin_filters>>>register_admin_filters()
注释
如果您使用的是django 1.7+,则需要为您的RichEnumValue
和OrderedRichEnumValue
类使用@deconstructible
装饰符,这样django的迁移框架就知道如何序列化您的RichEnumValue
和OrderedRichEnumValue
。
>>>fromdjango.utils.deconstructimportdeconstructible>>>fromrichenumimportRichEnumValue,OrderedRichEnumValue>>>@deconstructible...classCustomRichEnumValue(RichEnumValue):...pass...>>>@deconstructible...classCustomOrderedRichEnumValue(OrderedRichEnumValue):...pass...
贡献
更改日志
3.6.0(2019-07-09)
- Support for Django 2.2
- Support for Python 3.7
- Remove support for Django 2.0
3.5.0(2018-09-10)
- Fix [deprecation of context param for Field.from_db_value](https://code.djangoproject.com/ticket/28370)
- Support for Django 2.1
- Switch tests suite to use pytest
- Remove pylint-django plugin, no longer needed
3.4.0(2018-02-10)
- Drop support for old Django versions
3.3.0(2018-01-21)
- removed Python 3.4
- add support for Python 3.6
- add support for Django 2.0
- Properly mark raw strings (used as regex)
3.2.0(2016-08-22)
- Python 3.4 & 3.5 support
3.1.0(2015-08-02)
- Django 1.10 support
3.0.1(2015-07-13)
- Prepare for python 3 support
2.4.1(2015-05-04)
- replace mysql client library (for tests)
- stop using lambdas
2.3.0(2015-05-04)
- Support Django 1.8
2.2.0(2015-03-11)
- Support ModelForms for non-SQLite DB backends
2.1.0(2014-11-01)
- Support migration in Django 1.7
2.0.0(2014-09-04)
- Support Django 1.7, drop support for Python 2.6.
1.2.2(2014-08-02)
- Support Django 1.3
1.2.1(2014-06-02)
- Remove uses of BaseException.message.
1.2.0(2013-12-03)
- Add enum-aware versions of TypedMultipleChoiceField.
1.1.0(2013-12-03)
- Fix form fields to support Django 1.6 (while maintaining compatibility with 1.4 and 1.5).
1.0.2(2013-11-05)
- Make EnumField.run_validators a no-op. This stops some warnings from type comparison, and it doesn’t seem useful in an EnumField context.
1.0.1(2013-09-10)
- Support South.