くらげになりたい。

くらげのようにふわふわ生きたい日曜プログラマなブログ。趣味の備忘録です。

Python3.4新機能:便利なEnumをDjangoのModelでもつかう

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())

以上!!

参考にしたサイト様