宜兴通达竭诚为您服务。

通达科技 - 宜兴电脑维护及IT服务外包服务商

第十章:准备好行动了吗?
  • 上传者: Administrator
  • 上传时间:2023年12月04日 23时34分44秒
摘要:
到目前为止,我们主要通过声明字段和视图来构建我们的模块。我们刚刚在  上一章 [1]  中引入了业务逻辑,感谢计算字段和 onchange。在任何真实的业务场景中,我们都希望将一些业务逻辑与操作按钮关联起来。在我们的 房地产示例中,我们希望能够: 取消或将属性标记为已售 接受或拒绝一个报价 有人可能 ......
正文 相关文章 请喝咖啡

    到目前为止,我们主要通过声明字段和视图来构建我们的模块。我们刚刚在 上一章 中引入了业务逻辑,感谢计算字段和 onchange。在任何真实的业务场景中,我们都希望将一些业务逻辑与操作按钮关联起来。在我们的 房地产示例中,我们希望能够:

    • 取消或将属性标记为已售

    • 接受或拒绝一个报价

    有人可能会认为我们已经可以通过手动更改状态来完成这些事情,但这并不是很方便。此外,我们还想添加一些额外的处理:当接受报价时,我们想要设置房产的销售价格和买家。

    操作类型

    参考: 与此主题相关的文档可以在 操作 和 错误管理 中找到。

     注解

    目标:在本节结束时:

    • 您应该能够取消或将属性标记为已售:

    取消并设置为已售出

    取消的房产无法出售,已售出的房产无法取消。为了清晰起见,在视图中添加了 state 字段。

    • 您应该能够接受或拒绝一个报价:

    接受或拒绝一个报价
    • 一旦接受了报价,应设置销售价格和买家:

    接受一个报价

    在我们的房地产模块中,我们想要将业务逻辑与一些按钮链接起来。最常见的方法是:

    • 在视图中添加一个按钮,例如在视图的 header 中:

    <form>
        <header>
            <button name="action_do_something" type="object" string="Do Something"/>
        </header>
        <sheet>
            <field name="name"/>
        </sheet>
    </form>
    
    • 并将此按钮链接到业务逻辑:

    from odoo import fields, models
    
    class TestAction(models.Model):
        _name = "test.action"
    
        name = fields.Char()
    
        def action_do_something(self):
            for record in self:
                record.name = "Something"
            return True
    

    通过将 type="object" 分配给我们的按钮,Odoo框架将在给定的模型上执行一个名为 name="action_do_something" 的Python方法。

    首先要注意的重要细节是,我们的方法名没有前缀下划线( _ )。这使得我们的方法成为一个 公共 方法,可以直接从Odoo界面调用(通过RPC调用)。到目前为止,我们创建的所有方法(compute,onchange)都是在内部调用的,所以我们使用了以下划线为前缀的 私有 方法。除非需要从用户界面调用,否则您应该始终将方法定义为私有方法。

    同时请注意我们在 self 上进行循环。始终假设一个方法可以在多个记录上调用;这样更有利于可重用性。

    最后,一个公共方法应该始终返回一些内容,以便可以通过XML-RPC进行调用。如果不确定,只需 return True 。

    在Odoo源代码中有数百个示例。一个示例是这个 视图中的按钮 <https://github.com/odoo/odoo/blob/cd9af815ba591935cda367d33a1d090f248dd18d/addons/crm/views/crm_lead_views.xml#L9-L11> __和它的 对应的Python方法 <https://github.com/odoo/odoo/blob/cd9af815ba591935cda367d33a1d090f248dd18d/addons/crm/models/crm_lead.py#L746-L760> __

     Exercise

    取消并将属性标记为已售。

    • 将按钮 ‘Cancel’ 和 ‘Sold’ 添加到 estate.property 模型中。取消的属性不能被设置为已售出,已售出的属性不能被取消。

      请参考 目标 的第一张图片以获取预期结果。

      提示:为了引发错误,您可以使用 UserError 函数。在Odoo源代码中有很多示例;-)

    • 在 estate.property.offer 模型中添加按钮 ‘Accept’ 和 ‘Refuse’。

      请参考 目标 的第二张图片以获取预期结果。

      提示:要将图标用作按钮,请查看 此示例.

    • 当一个报价被接受时,为相应的房产设置买家和销售价格。

      请参考 目标 的第三张图片以获取预期结果。

      注意:在现实生活中,对于一处房产,只能接受一个报价!

    对象类型

    在 第六章:终于有一些界面可以玩了 中,我们创建了一个与菜单相关联的操作。你可能想知道是否可以将操作链接到按钮上。好消息是,可以!一种方法是:

    <button type="action" name="%(test.test_model_action)d" string="My Action"/>
    

    我们使用 type="action" 并且我们在 name 中引用 外部标识符

    在 下一章节 中,我们将看到如何在Odoo中防止编码不正确的数据。

    本文章从网上收集,如有侵权请联系tderp@tderp.com删除
  • 微信扫一扫,一分也是爱:
  • 微信

服务原则及地区范围

宜兴通达网络科技有限公司,地处中国宜兴环科园内,是一家高新技术企业。公司在企业网络维护和企业信息化建设与咨询方面,有10多年经验。

我公司愿与客户一道,力求彻底解决客户问题!
我们不是在给企业提供“头痛医头、脚痛医脚”的暂时解决方案,而是在部署根本性安全与稳定服务!!
我们愿携手客户,建立企业IT规划;杜绝随意安装系统、软件等操作;力求共同维护有序、安全、稳定的网络办公环境!!!
IT服务,服务是根本,客户是上帝;我们提供快速响应、快速上门、快速排查,提供优质高效的服务!!!!

通达科技提供全国范围内的服务,服务形式包括远程协助、电话咨询、电子邮件咨询、传真咨询、问答平台的问题解决等。

宜兴地区提供上门服务:

  • 市区服务:宜城街道、城北街道(屺亭街道)、新街街道、新庄街道、环科园、渚桥开发区
  • 市郊服务:张渚镇、西渚镇、太华镇、徐舍镇、官林镇、杨巷镇、新建镇、和桥镇、高塍镇、万石镇、周铁镇、芳桥镇、丁蜀镇、湖父镇。
  • 联系电话:189-21-343434
  • 在线沟通: