跳转到主要内容

Django的真正枚举。

项目描述

此包允许您在Django中使用真正的Python(PEP435风格的)枚举。

https://travis-ci.org/hzdg/django-enumfields.svg?branch=master https://img.shields.io/pypi/v/django-enumfields.svg https://img.shields.io/pypi/pyversions/django-enumfields.svg

安装

  1. pip install django-enumfields

包含的工具

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)

其他地方

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

EnumIntegerField 与其工作方式相同,但其底层存储机制是 IntegerField 而不是 CharField

在表单中的使用

通过调用 formfield 方法,可以直接在 Form 中使用 EnumField

class MyForm(forms.Form):

    color = EnumField(Color, max_length=1).formfield()

枚举

通常,您只需要使用正常的 PEP435 风格的枚举,但是 django-enumfields 还包含自己版本的枚举,具有一些额外的功能。特别是,它具有智能定义标签的功能,例如在管理下拉菜单中使用的标签。默认情况下,它将根据常量名称的标题大写来创建标签。您可以通过嵌套的“Labels”类提供自定义标签。

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 提供了在 list_filter 中使用枚举的功能。

from enumfields.admin import EnumFieldListFilter

class MyModelAdmin(admin.ModelAdmin):
    list_filter = [('color', EnumFieldListFilter)]

Django Rest Framework 集成

EnumSupportSerializerMixin 混合允许您在 DRF 序列化器中使用枚举。

# 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__'

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源代码分发

django-enumfields-2.1.1.tar.gz (14.0 kB 查看哈希值)

上传时间 源代码

构建分发

django_enumfields-2.1.1-py3-none-any.whl (9.1 kB 查看哈希值)

上传时间 Python 3

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面