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())
以上!!