odoo - Many2one 字段上的 delegate 和 odoo15 中的 _inherits 有什么区别?

标签 odoo

其实我有两个问题:

第一个:下面的代码片段有什么区别吗?

class Pallet(models.Model):
    _name = 'test.pallet'
    _inherits = {'test.box': 'box_id'}
    _description = 'Test Pallet'

    box_id = fields.Many2one('test.box', 'Box', required=True,
                             ondelete='cascade')
    field_in_pallet = fields.Char('Field2')
class Pallet(models.Model):
    _name = 'test.pallet'
    _description = 'Test Pallet'

    box_id = fields.Many2one('test.box', 'Box', required=True,
                             ondelete='cascade',delegate=True)
    field_in_pallet = fields.Char('Field2')

第二个:如果我在代码中使用 _inherits,我看不出代码中没有它有什么区别。 例如:

class Pallet(models.Model):
    _name = 'test.pallet'
    _inherits = {'test.box': 'box_id'}
    _description = 'Test Pallet'

    box_id = fields.Many2one('test.box', 'Box', required=True,
                             ondelete='cascade')
    field_in_pallet = fields.Char('Field2')
class Pallet(models.Model):
    _name = 'test.pallet'
    _description = 'Test Pallet'

    box_id = fields.Many2one('test.box', 'Box', required=True,
                             ondelete='cascade')
    field_in_pallet = fields.Char('Field2')

示例 Many2one 字段就足够了。

最佳答案

对于第一个问题: 这是继承委托(delegate)的捷径。您可以在 Many2one 字段定义中使用 delegate=True 属性,而不是创建 _inherits 字典。这将与 _inherits 选项完全相同。主要优点是这更简单。

对于第二个问题: 第一个代码,它基于现有模型 (test.box) 创建一个新模型 (test.pallet),您可以使用它已有的功能。因此,当您从 test.pallet 模型创建新记录时,它将在 test.box 中创建一条记录,它们之间的链接是 box_id。

在这种情况下,您继承了包含所有字段的 test.box,并且可以在表单、树或其他 View 中显示它们,而无需在模型中重新创建它们。

对于第二个代码:您正在从头开始创建一个新模型,而不进行任何继承。

一般来说: 根据官方文档,Odoo 提供了三种类型的继承:

• 类继承(扩展):用于向现有模型添加新字段或方法。

• 原型(prototype)继承:用于复制现有模型的整个定义。它是通过使用 _name 和 _inherit 类属性来执行的 同时。

• 委托(delegate)继承:是在现有模型的基础上创建一个新模型,以使用其已有的功能。所以它是复制模型的定义而无需 复制数据结构使用 _inherits 模型属性(请注意附加的 s),或者您可以在 Many2one 字段定义中使用 delegate=True 属性,而无需使用 _inherits。

关于odoo - Many2one 字段上的 delegate 和 odoo15 中的 _inherits 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71599656/

相关文章:

python - python中嵌套函数(函数中的函数)的目的

crm - 想要在保存记录时使字段只读,openerp

python - Openerp-如何删除图像上的编辑选项?

python - 如何从 OpenERP7 中的 act_window 调用 Python 函数?

python - 如何解决列 res_partner.<column> 在 Odoo 中不存在?

unit-testing - ODOO [V8] 单元测试

javascript - Odoo 8 POS模块。Orderline扩展功能

python - 我如何在 Eclipse 中调试 openerp 代码

python - 如何删除 Odoo 11 中默认的空选择框选项?

python - 类型错误 : cannot convert dictionary update sequence element #0 to a sequence - Odoo v10 community