Skip to main content

Django Enum library for python.

Project description

django-richenum

Build Status Latest PyPI Version Python versions Pypi Downloads

About

A Django extension of richenum for Python. If you’re unfamiliar with richenums, please read up on them (see Related Packages) before using django-richenum.

Model Fields

IndexEnumField

Store ints in DB, but expose OrderedRichEnumValues in Python.

CanonicalNameEnumField

Store varchar in DB, but expose RichEnumValues in Python. We recommend that you use IndexEnumField for storage and query efficiency.

LaxIndexEnumField

Like IndexEnumField, but also allows casting to and from canonical names. Mainly used to help migrate existing code that uses strings as database values.

Form Fields

CanonicalEnumField

Uses the RichEnum/OrderedRichEnum canonical_name as form field values.

IndexEnumField

Uses the OrderedRichEnum index as form field values.

Django Admin

RichEnumFieldListFilter

Enables filtering by RichEnum model fields in the Django admin UI

Installation

$ pip install django-richenum

Example Usage

IndexEnumField

>>> from richenum import OrderedRichEnum, OrderedRichEnumValue
>>> class MyOrderedRichEnum(OrderedRichEnum):
...    FOO = OrderedRichEnumValue(index=1, canonical_name="foo", display_name="Foo")
...    BAR = OrderedRichEnumValue(index=2, canonical_name="bar", display_name="Bar")
...
>>> from django.db import models
>>> from django_richenum.models import IndexEnumField
>>> class MyModel(models.Model):
...    my_enum = IndexEnumField(MyOrderedRichEnum, default=MyOrderedRichEnum.FOO)
...
>>> m = MyModel.objects.create(my_enum=MyOrderedRichEnum.BAR)
>>> m.save()
>>> m.my_enum
OrderedRichEnumValue - idx: 2  canonical_name: 'bar'  display_name: 'Bar'
>>> MyModel.objects.filter(my_enum=MyOrderedRichEnum.BAR)

CanonicalNameEnumField

>>> from richenum import RichEnum, RichEnumValue
>>> class MyRichEnum(RichEnum):
...    FOO = RichEnumValue(canonical_name="foo", display_name="Foo")
...    BAR = RichEnumValue(canonical_name="bar", display_name="Bar")
...
>>> from django.db import models
>>> from django_richenum.models import CanonicalNameEnumField
>>> class MyModel(models.Model):
...    my_enum = CanonicalNameEnumField(MyRichEnum, default=MyRichEnum.FOO)
...
>>> m = MyModel.objects.create(my_enum=MyRichEnum.BAR)
>>> m.save()
>>> m.my_enum
RichEnumValue - canonical_name: 'bar'  display_name: 'Bar'
>>> MyModel.objects.filter(my_enum=MyRichEnum.BAR)

RichEnumFieldListFilter

>>> from django_richenum.admin import register_admin_filters
>>> register_admin_filters()

Notes

If you’re using Django 1.7+, you’ll need to use the @deconstructible decorator for your RichEnumValue and OrderedRichEnumValue classes so Django’s migration framework knows how to serialize your RichEnumValue and OrderedRichEnumValue.

>>> from django.utils.deconstruct import deconstructible
>>> from richenum import RichEnumValue, OrderedRichEnumValue
>>> @deconstructible
... class CustomRichEnumValue(RichEnumValue):
...     pass
...
>>> @deconstructible
... class CustomOrderedRichEnumValue(OrderedRichEnumValue):
...     pass
...

Contributing

  1. Fork the repo from GitHub.

  2. Make your changes.

  3. Add unittests for your changes.

  4. Run pep8, pyflakes, and pylint to make sure your changes follow the Python style guide and doesn’t have any errors.

  5. Add yourself to the AUTHORS file (in alphabetical order).

  6. Send a pull request from your fork to the main repo.

Changelog

4.1.0 (2023-12-12)

  • Support for Django 4.2

  • Support for Python 3.11

  • Remove support for Django 2.2, 3.0, 3.1

  • Remove support for Python 3.7

  • Require MySQL 8 and Postgres 12

3.7.0 (2019-09-05)

  • Support for Django 2.3

3.6.0 (2019-07-09)

  • Support for Django 2.2

  • Support for Python 3.7

  • Remove support for Django 2.0

3.5.0 (2018-09-10)

3.4.0 (2018-02-10)

  • Drop support for old Django versions

3.3.0 (2018-01-21)

  • removed Python 3.4

  • add support for Python 3.6

  • add support for Django 2.0

  • Properly mark raw strings (used as regex)

3.2.0 (2016-08-22)

  • Python 3.4 & 3.5 support

3.1.0 (2015-08-02)

  • Django 1.10 support

3.0.1 (2015-07-13)

  • Prepare for python 3 support

2.4.1 (2015-05-04)

  • replace mysql client library (for tests)

  • stop using lambdas

2.3.0 (2015-05-04)

  • Support Django 1.8

2.2.0 (2015-03-11)

  • Support ModelForms for non-SQLite DB backends

2.1.0 (2014-11-01)

  • Support migration in Django 1.7

2.0.0 (2014-09-04)

  • Support Django 1.7, drop support for Python 2.6.

1.2.2 (2014-08-02)

  • Support Django 1.3

1.2.1 (2014-06-02)

  • Remove uses of BaseException.message.

1.2.0 (2013-12-03)

  • Add enum-aware versions of TypedMultipleChoiceField.

1.1.0 (2013-12-03)

  • Fix form fields to support Django 1.6 (while maintaining compatibility with 1.4 and 1.5).

1.0.2 (2013-11-05)

  • Make EnumField.run_validators a no-op. This stops some warnings from type comparison, and it doesn’t seem useful in an EnumField context.

1.0.1 (2013-09-10)

  • Support South.

1.0.0 (2013-08-16)

  • Initial public release.

Developed and maintained by Hearsay Social, Inc..

Contributors

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django-richenum-5.0.0.tar.gz (14.1 kB view details)

Uploaded Source

Built Distribution

django_richenum-5.0.0-py2.py3-none-any.whl (11.2 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file django-richenum-5.0.0.tar.gz.

File metadata

  • Download URL: django-richenum-5.0.0.tar.gz
  • Upload date:
  • Size: 14.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.8.17

File hashes

Hashes for django-richenum-5.0.0.tar.gz
Algorithm Hash digest
SHA256 b33eeb46409e2d69a9f9306c11918e05f79cd9a6fe3375a1b4979cadc6e00d64
MD5 be6cba36b9e03cc8bb97401fcfc4786f
BLAKE2b-256 3d48ea9d6f98a45f9ed684a38bb1690beb3245fdbda7fe4ba5135d8baba07e1d

See more details on using hashes here.

File details

Details for the file django_richenum-5.0.0-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for django_richenum-5.0.0-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 59dd00267d89ea97f69bf002a95ab9a809205010f9a14ee92f17faf1d4ecb457
MD5 0c427dba55509574236af7a48458872c
BLAKE2b-256 0f27b0f6d64ae33153d9dcb4c3c332448ac03a1db9569db4bc683b24520f3616

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page