Python3.xの新機能ネタ。3.4でEnumが入ったらしい。。便利。
Enumを使って、DjangoのModelのChoiceに利用してみたときの備忘録
Enum便利
form enum import Enum
class NumStatus(Enum):
ONE = 'いち'
TWO = 'に'
THREE = 'さん'
# name or valueでメンバーアクセス
print(NumStatus('いち').name) #=> 'ONE'
print(NumStatus('いち').value) #=> 'いち'
print(NumStatus['ONE'].name) #=> 'ONE'
print(NumStatus['ONE'].value) #=> 'いち'
DjangoのModelでEnumを使う
form enum import Enum
# Choiceで使えるEnumクラス
class Choosable(Enum):
@classmethod
def choices(cls):
return [(m.name, m.value) for m in cls]
@classmethod
def contains(cls, val):
return val in [m.name for m in cls]
# Choosableを継承して利用s
class NumStatus(Choosable):
ONE = 'いち'
TWO = 'に'
THREE = 'さん'
# Modeleでは、クラスメソッドを呼び出して使う
from django.db import models
class NumModel(models.Model):
num = models.CharField(max_length=10, choices=NumStatus.choices())
以上!!