我如何 combine/nest Django 中的 EnumFields?

How can I combine/nest EnumFields in Django?

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)

我不知道用什么来代替 ????,或者是否有更好的方法让这个 nested/combination 与 Django 一起玩。我主要是问,因为我想要 Enum 行为,能够探测不同的类型,例如在保存方法中,检查 User 年龄(如果饮料是)或输入 Beer

这可能吗?玩了一会儿我不知道怎么做。

查看了 Python 枚举的工作原理,这看起来是模拟的最佳行为 'subclasses'

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到return类型。