如何在Django中组合/嵌套枚举字段?

2024-05-15 11:38:48 发布

您现在位置:Python中文网/ 问答频道 /正文

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一起运行。我主要是询问我想要的枚举行为,以及探测不同类型的能力,例如,在save方法中,如果饮料是或类型为User,则检查User年龄。在

这可能吗?玩了一段时间我不知道怎么玩。在


Tags: django方法fromimport类型modelsenumclass
1条回答
网友
1楼 · 发布于 2024-05-15 11:38:48

在研究了Python枚举的工作方式之后,这看起来是模拟“子类”的最佳行为

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返回类型。在

相关问题 更多 >