Python枚举ChoiceEnum 应用于 parser.add_argument choices / Django choice / DRF ChoiceField
from enum import Enum
# 定义枚举类
class ChoiceEnum(Enum):
@classmethod
def choices(cls):
return tuple((member.name, member.value) for member in cls)
@classmethod
def parse(cls, value):
for member in cls:
if member.value == value:
return member
raise ValueError(f"无效的选项: {value!r}")
# 使用枚举类
class Status(ChoiceEnum):
ACTIVE = "active"
INACTIVE = "inactive"
PENDING = "pending"
# 示例:使用choices方法作为parser.add_argument的choices参数
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("status", choices=Status.choices())
# 示例:使用parse方法解析用户输入
try:
parsed_status = Status.parse("active")
print(f"解析的状态: {parsed_status.name}")
except ValueError as e:
print(e)
# Django模型字段的choices使用
from django.db import models
class MyModel(models.Model):
STATUS_CHOICES = Status.choices()
status = models.CharField(max_length=10, choices=STATUS_CHOICES)
# Django表单字段的choices使用
from django import forms
class MyForm(forms.Form):
status = forms.ChoiceField(choices=Status.choices())
# Django admin的choices使用
from django.contrib import admin
class MyAdmin(admin.ModelAdmin):
list_display = ('status',)
list_filter = ('status',)
form = forms.MyForm
fields = ['status']
# Django ORM的choices使用
class MyORMModel(models.Model):
status = models.CharField(max_length=20, choices=Status.choices())
这个代码示例展示了如何在不同的上下文中使用ChoiceEnum枚举类:
- 在argparse中定义命令行参数的有效值。
- 在Django模型、表单和admin中使用choices。
- 在Django ORM模型中使用choices。
评论已关闭