在窗体上轻松创建额外的元选项类

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已经设置为元类。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
在Ubuntu 10.10上使用Android SDK真的需要Sun Java吗?我更喜欢OpenJDK   为什么我要买javafx。fxml。Java中的LoadException   java无法通过Android测试连接到Sql Server   JavaSpring数据Rest如何更改抽象类集合的JSON序列化   java requestCode=1和resultCode=0为画廊或照相机中的图像选择内容   Java中崩溃时的并发释放锁   java JList左附加并填充   终端Java运行时exec命令执行无法正确执行多文件夹命令   socket如何读取java流,直到达到某个字节   java为什么Tomcat 8.5选项allowLinking=true会加快启动速度   java计算图像梯度   java根据预定义的规则集将输入集分类   java jsp和获取属性数据   添加GCM后端时java Android应用程序构建失败   java如何组合两个查询opencmis alfresco