skip to navigation
skip to content

Not Logged In

django-enumfield 1.0

Custom Django field for using enumerations of named constants

Latest Version: 1.0.1


Provides an enumeration Django model field (using IntegerField) with reusable enums and transition validation.

.. image::


Install django-enumfield in your python environment

.. code:: sh

    $ pip install django-enumfield


Create an Enum-class and pass it as first argument to the Django model EnumField.

.. code:: python

    from django.db import models
    from django_enumfield import enum

    class BeerStyle(enum.Enum):
        LAGER = 0
        STOUT = 1
        WEISSBIER = 2

    class Beer(models.Model):
        style = enum.EnumField(BeerStyle, default=BeerStyle.LAGER)

.. code:: python


The Enum-class provides the possibility to use transition validation.

.. code:: python

    from django.db import models
    from django_enumfield import enum

    class PersonStatus(enum.Enum):
        ALIVE = 1
        DEAD = 2
        REANIMATED = 3

        _transitions = {
            DEAD: (ALIVE,),
            REANIMATED: (DEAD,)

    class Person(models.Model):
        status = enum.EnumField(PersonStatus)

These transitions state that a PersonStatus can only go to DEAD from ALIVE and to REANIMATED from DEAD.

.. code:: python

    person = Person.objects.create(status=PersonStatus.ALIVE)
        person.status = PersonStatus.REANIMATED
    except InvalidStatusOperationError:
        print "Person status can not go from ALIVE to REANIMATED"

The Enum-class can also be used without the EnumField. This is very useful in Django form ChoiceFields.

.. code:: python

    from django.forms import Form
    from django_enumfield import enum

    class GenderEnum(enum.Enum):
        MALE = 1
        FEMALE = 2

    class PersonForm(forms.Form)
        gender = forms.TypedChoiceField(choices=GenderEnum.choices(), coerce=int)

Rendering PersonForm in a template will generate a select-box with "Male" and "Female" as option labels for the gender field.
File Type Py Version Uploaded on Size
django-enumfield-1.0.tar.gz (md5) Source 2013-11-14 8KB
  • Downloads (All Versions):
  • 71 downloads in the last day
  • 321 downloads in the last week
  • 977 downloads in the last month