为CharFields定义DRY、封装的选择选项的包装类。
项目描述
为CharFields定义DRY、封装的选择选项的包装类。
ChoiceEnumeration
ChoiceEnumeration 类可以在以下格式中声明为模块或类级别
class ChoiceClass(ChoiceEnumeration): ATTR1 = ChoiceEnumeration.Option('db_value1', 'Human readable text 1') ATTR2 = ChoiceEnumeration.Option('db_value2', 'Human readable text 2')
以下属性在ChoiceEnumeration子类上生成
ALL_OPTIONS - 提供的选项的元组
CHOICES - 与Django char field兼容的选择元组
CHOICES_DICT - 选项:文本值的字典
DEFAULT - (可选)标记为默认的项
典型的Django示例可能如下所示
class SomeModel(models.Model): class MetaVar(ChoiceEnumeration): FOO = ChoiceEnumeration.Option('foo', 'Foo Choice', default=True) BAR = ChoiceEnumeration.Option('bar', 'Bar Option') BAZ = ChoiceEnumeration.Option('baz', 'Baz Pick') SPAM = ChoiceEnumeration.Option('spam', 'Spam spam spam') EGGS = ChoiceEnumeration.Option('eggs', 'Eggs, Spam, and Ham')
- 示例交互使用:
>>> class MetaVar(ChoiceEnumeration): ... FOO = ChoiceEnumeration.Option('foo', 'Foo Choice', default=True) ... BAR = ChoiceEnumeration.Option('bar', 'Bar Option') ... BAZ = ChoiceEnumeration.Option('baz', 'Baz Pick') ... SPAM = ChoiceEnumeration.Option('spam', 'Spam spam spam') ... EGGS = ChoiceEnumeration.Option('eggs', 'Eggs, Spam, and Ham') >>> MetaVar.FOO u'foo' >>> MetaVar.ALL_OPTIONS (u'foo', u'bar', u'baz', u'spam', u'eggs') >>> MetaVar.CHOICES ((u'foo', 'Foo Choice'), (u'bar', 'Bar Option'), (u'baz', 'Baz Pick'), (u'spam', 'Spam spam spam'), (u'eggs', 'Eggs, Spam, and Ham')) >>> MetaVar.CHOICES_DICT {u'baz': 'Baz Pick', u'eggs': 'Eggs, Spam, and Ham', u'foo': 'Foo Choice', u'bar': 'Bar Option', u'spam': 'Spam spam spam'} >>> MetaVar.DEFAULT u'foo' >>> MetaVar.CHOICES_DICT[MetaVar.FOO] 'Foo Choice'
make_enum_class
make_enum_class 动态生成一个派生自 ChoiceEnumeration 的类。
示例
from choice_enum import make_enum_class, Option MetaVar = make_enum_class('MetaVar', FOO=Option('foo', 'Foo Choice', default=True), BAR=Option('bar', 'Bar Option'), BAZ=Option('baz', 'Baz Pick') )