Odoo17入门教程第十章 准备好采取行动了吗?

本文介绍了如何在Odoo的房地产模块中将业务逻辑与操作按钮(如取消/已售出、接受/拒绝要约)关联,通过添加公共方法和使用type=action属性创建可调用的按钮。还讨论了方法命名规则和操作类型的使用,以及与菜单的链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

  • 取消或将房产设置为已售出

  • 接受或拒绝要约

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

对象类型

注意

目标:在本节结束时:

  • 您应该能够取消或将房产设置为已售出:

取消并设置为已售

已取消的房产不能出售,已售出的房产也不能取消。为了 清晰起见,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框架将执行Python方法name="action_do_something" 在给定的模型上。

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

另请注意,我们循环使用 .始终假设可以在多条记录上调用一个方法;它 更好的可重用性。self

最后,公共方法应始终返回某些内容,以便可以通过 XML-RPC 调用它。 如有疑问,只需.return True

Odoo源代码中有数百个示例。

锻炼

取消房产并将其设置为已售出。

  • 将“取消”和“已售出”按钮添加到estate.property模型中。已取消的属性 不能设置为已售出,并且已售出的房产不能取消。

    有关预期结果,请参阅目标的第一张图片。

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

  • 将“接受”和“拒绝”按钮添加到estate.property.offer模型中。

    有关预期结果,请参阅目标的第二张图片。

    提示:要将图标用作按钮。

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

    有关预期结果,请参阅目标的第三张图片。

    注意:在现实生活中,给定的房产只能接受一个报价!

操作类型

第六章中,我们创建了一个链接到菜单的操作。你 可能想知道是否可以将操作链接到按钮。好消息,确实如此!一种方法 是:

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

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

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

odoo实施

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值