跳转到主要内容

基本内容类型表单

项目描述

License: LGPL-3

CMS Form

基本网站内容表单框架。允许以简单的方式定义前端表单。

如果您厌倦了每次都要重新定义odoo网站的编辑表单或搜索表单,这个模块就是您要找的。

功能

  • 自动表单生成(创建、编辑、搜索)

  • 自动生成路由(创建、编辑、搜索)

  • 基于字段类型的自动机制
    • 小部件渲染

    • 字段值加载(从现有实例或请求中获取)

    • 字段值提取(从请求中获取)

    • 字段值写入(写入现有实例)

  • 高度可定制

  • 适用于每个Odoo模型

  • 即使没有模型也可以使用

  • 为继承自website.published.mixin的模型添加实用属性
    • cms_add_url:跳转到创建表单视图。默认为/cms/form/create/my.model

    • cms_edit_url:跳转到编辑表单视图。默认为/cms/form/edit/my.model/model_id

    • cms_search_url:跳转到搜索表单视图。默认为/cms/form/search/my.model

使用方法

创建/编辑表单

只需继承自cms.form,为您的模型添加表单。以下是一个针对合作伙伴的快速示例

class PartnerForm(models.AbstractModel):

    _name = 'cms.form.res.partner'
    _inherit = 'cms.form'
    _form_model = 'res.partner'
    _form_model_fields = ('name', 'country_id')
    _form_required_fields = ('name', 'country_id')

在这种情况下,您将拥有以下特征的表单

  • res.partner模型一起工作

  • 只有namecountry_id字段

  • 两个字段都是必需的(没有这些值之一就无法提交表单)

这就是结果

preview_create preview_edit

表单将在以下路由上自动可用

  • /cms/form/create/res.partner 用于创建新合作伙伴

  • /cms/form/edit/res.partner/1 编辑现有合作伙伴(本例中合作伙伴ID为1)

注意:如果表单的名称为 cms.form. + 模型名称,如 cms.form.res.partner,则默认通用路由将正常工作。如果您愿意,可以轻松定义自己的控制器,并给表单一个不同的名称,并拥有更优雅的路由,如 `/partner/edit/partner-slug-1`。请参阅 cms_form_example

默认情况下,表单以水平Twitter Bootstrap表单的形式渲染,但当然您可以提供自己的模板。默认情况下,字段按模型架构中的顺序排序。您可以使用 _form_fields_order 进行调整。

具有额外控制字段的表单

想象一下,您想在合作伙伴创建后通知合作伙伴,但仅当您真的需要时。

上述表单可以扩展,添加不是 _form_model 架构部分的额外字段

class PartnerForm(models.AbstractModel):

    _name = 'cms.form.res.partner'
    _inherit = 'cms.form'
    _form_model = 'res.partner'
    _form_model_fields = ('name', 'country_id', 'email')
    _form_required_fields = ('name', 'country_id', 'email')

    notify_partner = fields.Boolean()

    def form_after_create_or_update(self, values, extra_values):
        if extra_values.get('notify_partner'):
            # do what you want here...

notify_partner 将包含在表单中,但在创建和写入时会将其丢弃。尽管如此,您可以使用钩子 form_after_create_or_update 在记录创建或更新前后将其用作控制标志,就像在这个示例中看到的那样。

搜索表单

只需从 cms.form.search 继承即可为您自己的模型添加表单。以下是对合作伙伴的快速示例

class PartnerSearchForm(models.AbstractModel):
    """Partner model search form."""

    _name = 'cms.form.search.res.partner'
    _inherit = 'cms.form.search'
    _form_model = 'res.partner'
    _form_model_fields = ('name', 'country_id', )
    _form_fields_order = ('country_id', 'name', )

preview_search

表单将在以下位置自动可用:/cms/form/search/res.partner

注意:如果表单的名称为 `cms.form.search + 模型名称,如 cms.form.search.res.partner,则默认通用路由将正常工作。如果您愿意,可以轻松定义自己的控制器,并给表单一个不同的名称,并拥有更优雅的路由,如 /partners。请参阅 cms_form_example

主/从字段

现在的典型用例:您想根据其他字段的值显示/隐藏字段。对于最简单的情况,您不需要写一行JS。您可以这样做

class PartnerForm(models.AbstractModel):

    _name = 'cms.form.res.partner'
    _inherit = 'cms.form'
    _form_model = 'res.partner'
    _form_model_fields = ('name', 'type', 'foo')

    def _form_master_slave_info(self):
        info = self._super._form_master_slave_info()
        info.update({
            # master field
            'type':{
                # actions
                'hide': {
                    # slave field: action values
                    'foo': ('contact', ),
                },
                'show': {
                    'foo': ('address', 'invoice', ),
                }
            },
        })
        return info

在这里,我们声明了

  • type 字段等于 contact 时 -> 隐藏 foo 字段

  • type 字段等于 addressinvoice 时 -> 显示 foo 字段

已知问题/路线图

  • 添加更多测试,特别是每个小部件和字段类型

  • 提供更好的图像和文件字段小部件

  • o2m字段:要进行全面测试

  • 将小部件移动到抽象模型中

  • 搜索表单:以巧妙的方式生成默认搜索域

  • 添加从水平表单切换到垂直表单的简单方法

  • 提供更多示例

  • x2x字段:允许创建子项

  • 处理API onchanges

  • 支持Python表达式进入主/从规则

错误跟踪器

错误在 GitHub Issues 上跟踪。如果在那里遇到问题,请检查您的问题是否已经报告。如果您是第一个发现它的,请通过提供详细且受欢迎的反馈来帮助我们解决这个问题。

致谢

贡献者

维护者

Odoo Community Association

本模块由OCA维护。

OCA,或Odoo社区协会,是一个非营利组织,其使命是支持Odoo功能的协作开发并推广其广泛使用。

为贡献此模块,请访问 https://odoo-community.org

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源代码分发

本发布版本没有可用的源代码分发文件。请参阅有关 生成分发归档 的教程。

构建分发

odoo9_addon_cms_form-9.0.1.0.0-py2-none-any.whl (91.9 kB 查看哈希值)

上传时间 Python 2

支持