Real Python Enums for Django.
Project description
This package lets you use real Python (PEP435-style) enums with Django.
Installation
- pip install django-enumfields
Included Tools
EnumField, EnumIntegerField
from enumfields import EnumField from enum import Enum class Color(Enum): RED = 'r' GREEN = 'g' BLUE = 'b' class MyModel(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.
class MyForm(forms.Form): color = EnumField(Color, max_length=1).formfield()
Enum
Normally, you just use normal PEP435-style enums, however, django-enumfields also includes 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.
from enumfields import EnumField, Enum # Our own Enum class class Color(Enum): RED = 'r' GREEN = 'g' BLUE = 'b' class Labels: RED = 'A custom label' class MyModel(models.Model): color = EnumField(Color, max_length=1) assert Color.GREEN.label == 'Green' assert Color.RED.label == 'A custom label'
EnumFieldListFilter
enumfields.admin.EnumFieldListFilter is provided to allow using enums in list_filter.
from enumfields.admin import EnumFieldListFilter class MyModelAdmin(admin.ModelAdmin): list_filter = [('color', EnumFieldListFilter)]
Django Rest Framework integration
EnumSupportSerializerMixin mixin allows you to use enums in DRF serializers.
# models.py from enumfields import EnumField from enum import Enum class Color(Enum): RED = 'r' GREEN = 'g' BLUE = 'b' class MyModel(models.Model): color = EnumField(Color, max_length=1) # serializers.py from enumfields.drf.serializers import EnumSupportSerializerMixin from rest_framework import serializers from .models import MyModel class MyModelSerializer(EnumSupportSerializerMixin, serializers.ModelSerializer): class Meta: model = MyModel fields = '__all__'
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for django_enumfields-2.1.1-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | d32f2151801a5fc13c860276ee99495c2c9345e0a4281d0104276c39ddb22807 |
|
MD5 | 2ea066aa8564d7ca636b5241f1b42785 |
|
BLAKE2-256 | a40f30b3c47b88ebf4c9fcd5f0387f8982cc4adc39705232f745ebcc3fbe6172 |