跳转到主要内容

Django的真实枚举。

项目描述

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

django-enumfields2hzdg/django-enumfields的一个友好的分支,仍然在维护。

https://github.com/akx/django-enumfields2/actions/workflows/ci.yml/badge.svg https://img.shields.io/pypi/v/django-enumfields2.svg https://img.shields.io/pypi/pyversions/django-enumfields2.svg

安装

  1. pip安装django-enumfields2

包含工具

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)

EnumIntegerFieldEnumField工作方式相同,但底层存储机制是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_enumfields2-3.0.2.tar.gz (6.7 kB 查看散列值)

上传时间 源代码

构建分发

django_enumfields2-3.0.2-py3-none-any.whl (9.0 kB 查看散列值)

上传时间 Python 3

由以下机构支持

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