This package lets you use real Python (PEP435-style) enums with Django.
pip install django-enumfields
fromenumfieldsimportEnumFieldfromenumimportEnum# Uses Ethan Furman's "enum34" backportclassMyModel(models.Model):
classColor(Enum):
RED='r'GREEN='g'BLUE='b'color=EnumField(Color, max_length=1)Elsewhere:
m=MyModel.objects.filter(color=MyModel.Color.RED)EnumIntegerField works identically, but the underlying storage mechanism is
an IntegerField instead of a CharField.
Normally, you just use normal PEP435-style enums, however, django-enumfields also encludes its own version of Enum with a few extra bells and whistles. Namely, the smart definition of labels which are used, for example, in admin dropdowns. By default, it will create labels by title-casing your constant names. You can provide custom labels with a nested "Labels" class.
fromenumfieldsimportEnumField, Enum# Our own Enum classclassMyModel(models.Model):
classColor(Enum):
RED='r'GREEN='g'BLUE='b'classLabels:
RED='A custom label'color=EnumField(Color, max_length=1)
assertMyModel.Color.GREEN.label=='Green'assertMyModel.Color.RED.label=='A custom label'