如何在Django中组合/嵌套EnumField?

时间:2015-02-08 22:01:28

标签: python django enums

Django-EnumFields让你在Django中组合枚举字段(线索在标题中)。

你能把这些结合起来吗?

以下是播放docs

的示例
from django.db import models
from django_enumfield import enum

class BeerStyle(enum.Enum):
    LAGER = 0
    STOUT = 1
    WEISSBIER = 2

class SoftDrinkStyle(enum.Enum):
    COKE = 3
    LEMONADE = 4

class Drink(models.Model):
    style = enum.EnumField(????, default=BeerStyle.LAGER)

我不知道代替????会有什么用,或者是否有更好的方法让这个嵌套/组合与Django一起玩。我主要问的是我想要Enum行为,能够探测不同的类型,例如:在保存方法中,如果饮品是User,请检查Beer年龄。

这可能吗?玩了一会儿,我看不出来。

1 个答案:

答案 0 :(得分:2)

了解了Python Enums的工作原理,这似乎是模拟“子类”

的最佳行为
from django.db import models
from django_enumfield import enum

class DrinkStyle(enum.Enum):
    LAGER = (0, 'Beer')
    STOUT = (1, 'Beer')
    WEISSBIER = (2, 'Beer')
    COKE = (3, 'SoftDrink')
    LEMONADE = (4, 'SoftDrink')

    def __init__(self, id, drink_type):
        self.id = id    
        self.type = drink_type

    @property
    def type(self):
        return self.drink_type

class Drink(models.Model):
    style = enum.EnumField(DrinkStyle, default=DrinkStyle.LAGER)

然后使用DrinkStyle.COKE.type返回类型。