Django字段,用于设置/获取django的新TextChoices/IntegerChoices枚举。
项目描述
django-choices-field
Django字段,用于设置/获取django的新TextChoices/IntegerChoices枚举。
安装
pip install django-choices-field
用法
import enum
from django.db import models
from django_choices_field import TextChoicesField, IntegerChoicesField, IntegerChoicesFlag
class MyModel(models.Model):
class TextEnum(models.TextChoices):
FOO = "foo", "Foo Description"
BAR = "bar", "Bar Description"
class IntegerEnum(models.IntegerChoices):
FIRST = 1, "First Description"
SECOND = 2, "Second Description"
class IntegerFlagEnum(IntegerChoicesFlag):
FIRST = enum.auto(), "First Option"
SECOND = enum.auto(), "Second Option"
THIRD = enum.auto(), "Third Option"
text_field = TextChoicesField(
choices_enum=TextEnum,
default=TextEnum.FOO,
)
integer_field = IntegerChoicesField(
choices_enum=IntegerEnum,
default=IntegerEnum.FIRST,
)
flag_field = IntegerChoicesFlagField(
choices_enum=IntegerFlagEnum,
default=IntegerFlagEnum.FIRST | IntegerFlagEnum.SECOND,
)
obj = MyModel()
reveal_type(obj.text_field) # MyModel.TextEnum.FOO
assert isinstance(obj.text_field, MyModel.TextEnum)
assert obj.text_field == "foo"
reveal_type(obj.integer_field) # MyModel.IntegerEnum.FIRST
assert isinstance(obj.integer_field, MyModel.IntegerEnum)
assert obj.integer_field == 1
reveal_type(obj.flag_field) # MyModel.IntegerFlagEnum.FIRST | MyModel.IntegerFlagEnum.SECOND
assert isinstance(obj.integer_field, MyModel.IntegerFlagEnum)
assert obj.flag_field == 3
注意:IntegerChoicesFlag需要python 3.11+才能正常工作。
许可证
本项目采用MIT许可证(更多信息请参阅LICENSE
)
贡献
请确保已安装poetry。
使用以下命令安装依赖项
poetry install
使用以下命令运行测试套件
poetry run pytest
请随意fork项目,并提交包含新功能、纠正和翻译的pull请求。我会很高兴尽快合并它们并发布新版本。
项目详情
下载文件
下载适用于您平台的文件。如果您不确定该选择哪个,请了解更多关于 安装包 的信息。
源分发
django_choices_field-2.3.0.tar.gz (6.4 kB 查看哈希值)