Skip to content

Repository files navigation

This package lets you use real Python (PEP435-style) enums with Django.

https://travis-ci.org/hzdg/django-enumfields.svg?branch=master

Installation

  1. pip install django-enumfields

Included Tools

EnumField, EnumIntegerField

fromenumfieldsimportEnumFieldfromenumfieldsimportEnum# Uses Ethan Furman's "enum34" backportclassColor(Enum):
RED='r'GREEN='g'BLUE='b'classMyModel(models.Model):
color=EnumField(Color, max_length=1)

Elsewhere:

m=MyModel.objects.filter(color=Color.RED)

EnumIntegerField works identically, but the underlying storage mechanism is an IntegerField instead of a CharField.

Usage in Forms

Call the formfield method to use an EnumField directly in a Form.

classMyForm(forms.Form):
color=EnumField(Color, max_length=1).formfield()

Enum

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 classclassColor(Enum):
RED='r'GREEN='g'BLUE='b'classLabels:
RED='A custom label'classMyModel(models.Model):
color=EnumField(Color, max_length=1)
assertColor.GREEN.label=='Green'assertColor.RED.label=='A custom label'

EnumFieldListFilter

enumfields.admin.EnumFieldListFilter is provided to allow using enums in list_filter.

fromenumfields.adminimportEnumFieldListFilterclassMyModelAdmin(admin.ModelAdmin):
list_filter= [('color', EnumFieldListFilter)]

About

Real Python Enums for Django

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages