在表单上轻松创建额外的Meta选项类
项目描述
轻松为您的Django表单、模型等添加更多类似Meta的选项类。
安装
使用pip安装
pip install django-easyoptions
它适用于Django 1.4及更高版本。
使用
要使用类中的选项,请定义一个选项类,并使用提供的元类生成器之一。
from django import forms
from django.utils import six
from easyoption.options import OptionsBase, form_option_factory
# Define your ``Option``\s container class
class ExtendedOptions(OptionsBase):
def __init__(self, options):
# Collect your options, supplying defaults as appropriate
self.foo = options.pop('foo', None)
self.frobnicate = options.pop('frobnicate', True)
# Call the ``super().__init__()``, which ensures all options are
# consumed.
super(ExtraOption, self).__init__(options)
# Define your base class, using the options from ``_extendedoptions``
class ExtendedForm(six.with_metaclass(
form_option_factory(ExtendedOptions),
forms.Form)):
def __init__(self, **kwargs):
super(ExtendedForm, self).__init__(**kwargs)
if self._extendedoptions.frobnicate:
self.bar(self._extendedoptions.foo)
# Extend your base class, and define the ``ExtendedOptions`` for options
# for this specific implementation
class SpecificExtendedForm(ExtendedForm):
class ExtendedOptions:
foo = 'quux'
方法
options.options_factory
执行所有工作的主要方法是options.options_factory。它生成一个新的元类,您应该将其应用于基类,以便子类可以定义自己的选项。此方法接受四个参数
- options_processor
一个可调用对象,用于处理类的选项字典中的选项。这通常是一个继承自options.OptionsBase的类子类,但可以是任何可调用对象,只要它返回某种选项结构。
- options_class_name
可以找到选项定义的类的属性名。
默认为options_processor.__name__,这对于类来说效果很好。
- options_attr_name
存储处理后的选项的属性名。
默认为'_' + options_class_name.lower()。
- metaclass
要扩展的基本元类。
默认为type。
options.form_options_factory
使用已设置为Django表单的元类的metaclass调用options.options_factory。
options.modelform_options_factory
调用 options.options_factory,并将 metaclass 设置为 Django 模型表单的元类。
项目详情
下载文件
下载适用于您平台的应用程序文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。
源代码分发
django-easyoptions-0.1.0.tar.gz (3.8 kB 查看哈希值)
关闭
django-easyoptions-0.1.0.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 7cf29e7097f84f8a319624b082d34b4eda19d2ebf80f3315c37eda7e38a5fa28 |
|
MD5 | 048a0fcf7633118d2b41a2098f4d6e3a |
|
BLAKE2b-256 | 00a557f22358c12d1af03d2de004b725e4eeb64e4f3159aa6d1d98586c2d88b3 |