Django的真正枚举。
项目描述
此包允许您在Django中使用真正的Python(PEP435风格的)枚举。
安装
pip install django-enumfields
包含的工具
EnumField, EnumIntegerField
from enumfields import EnumField
from enum import Enum
class Color(Enum):
RED = 'r'
GREEN = 'g'
BLUE = 'b'
class MyModel(models.Model):
color = EnumField(Color, max_length=1)
其他地方
m = MyModel.objects.filter(color=Color.RED)
EnumIntegerField 与其工作方式相同,但其底层存储机制是 IntegerField 而不是 CharField。
在表单中的使用
通过调用 formfield 方法,可以直接在 Form 中使用 EnumField。
class MyForm(forms.Form):
color = EnumField(Color, max_length=1).formfield()
枚举
通常,您只需要使用正常的 PEP435 风格的枚举,但是 django-enumfields 还包含自己版本的枚举,具有一些额外的功能。特别是,它具有智能定义标签的功能,例如在管理下拉菜单中使用的标签。默认情况下,它将根据常量名称的标题大写来创建标签。您可以通过嵌套的“Labels”类提供自定义标签。
from enumfields import EnumField, Enum # Our own Enum class
class Color(Enum):
RED = 'r'
GREEN = 'g'
BLUE = 'b'
class Labels:
RED = 'A custom label'
class MyModel(models.Model):
color = EnumField(Color, max_length=1)
assert Color.GREEN.label == 'Green'
assert Color.RED.label == 'A custom label'
EnumFieldListFilter
enumfields.admin.EnumFieldListFilter 提供了在 list_filter 中使用枚举的功能。
from enumfields.admin import EnumFieldListFilter
class MyModelAdmin(admin.ModelAdmin):
list_filter = [('color', EnumFieldListFilter)]
Django Rest Framework 集成
EnumSupportSerializerMixin 混合允许您在 DRF 序列化器中使用枚举。
# models.py
from enumfields import EnumField
from enum import Enum
class Color(Enum):
RED = 'r'
GREEN = 'g'
BLUE = 'b'
class MyModel(models.Model):
color = EnumField(Color, max_length=1)
# serializers.py
from enumfields.drf.serializers import EnumSupportSerializerMixin
from rest_framework import serializers
from .models import MyModel
class MyModelSerializer(EnumSupportSerializerMixin, serializers.ModelSerializer):
class Meta:
model = MyModel
fields = '__all__'
项目详情
下载文件
下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。
源代码分发
django-enumfields-2.1.1.tar.gz (14.0 kB 查看哈希值)