首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Many2one字段上的委托与odoo15中的_inherits有什么不同?

Many2one字段上的委托与odoo15中的_inherits有什么不同?
EN

Stack Overflow用户
提问于 2022-03-24 09:08:28
回答 1查看 147关注 0票数 1

事实上,我有两个问题:

第一个问题:下面的代码段之间有什么区别吗?

代码语言:javascript
复制
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')
代码语言:javascript
复制
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,在代码中没有它就不会有任何区别。例如:

代码语言:javascript
复制
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')
代码语言:javascript
复制
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字段就足够了。

EN

回答 1

Stack Overflow用户

发布于 2022-03-26 11:59:21

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

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

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

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

一般而言:根据官方文件,Odoo提供了三种类型的继承:

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

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

委托继承:它是在现有模型的基础上创建一个新模型,以使用它已经拥有的特性。因此,它是在不重复数据结构的情况下复制模型的定义,使用_inherits模型属性(注意附加的s),或者您可以在Many2one字段定义中使用delegate=True属性,而不需要使用_inherits。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71599656

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档