在窗体上轻松创建额外的元选项类
django-easyoptions的Python项目详细描述
轻松地向django表单、模型等添加更多类似于meta的选项类。
安装
使用pip安装:
pip install django-easyoptions
它适用于django 1.4及以上。
使用
利用你班上的选项, 定义选项类,然后 使用提供的元类工厂之一。
fromdjangoimportformsfromdjango.utilsimportsixfromeasyoption.optionsimportOptionsBase,form_option_factory# Define your ``Option``\s container classclassExtendedOptions(OptionsBase):def__init__(self,options):# Collect your options, supplying defaults as appropriateself.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``classExtendedForm(six.with_metaclass(form_option_factory(ExtendedOptions),forms.Form)):def__init__(self,**kwargs):super(ExtendedForm,self).__init__(**kwargs)ifself._extendedoptions.frobnicate:self.bar(self._extendedoptions.foo)# Extend your base class, and define the ``ExtendedOptions`` for options# for this specific implementationclassSpecificExtendedForm(ExtendedForm):classExtendedOptions:foo='quux'
方法
options.options_factory
做所有工作的主要方法是 options.options_factory。 它生成一个新的元类,您应该将其应用于基类, 允许子类定义自己的选项。 该方法接受四个参数:
- options_processor
- 处理类中选项dict的可调用函数。 这通常是类的子类options.OptionsBase, 但只要它返回一些选项结构,就可以调用。
- options_class_name
可在其中找到选项定义的类的属性的名称。
默认为options_processor.__name__,它与类一起工作得很好。
- options_attr_name
存储已处理选项的属性的名称。
默认为'_' + options_class_name.lower()。
- metaclass 要扩展的基元类。 很多django类已经有了元类, 所以如果你要给已经有一个元类的类添加选项, 你必须在这里提供它,以便全班正常工作。
默认为type。
options.form_options_factory
调用options.options_factory 对于django表单,metaclass已经设置为元类。
options.modelform_options_factory
调用options.options_factory 对于django模型表单,metaclass已经设置为元类。