我如何 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类型。
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类型。