将标准Odoo模块复制到新的自定义模块

将标准Odoo模块复制到新的自定义模块,odoo,Odoo,是否有一个直接的过程将一个模块复制到一个具有自己依赖项的新模块名 在我的示例中,我需要创建一个非常类似于事件模块的模块,但我还需要原始形式的事件模块 我认为最简单的方法是将事件模块复制到一个新的模块名,然后对其进行更改。是的,您可以这样做。。。但是您必须重构与事件模块不同的模块名称、模型名称、视图(表单、树、操作)名称。因此,您的事件模块没有堆积起来。不要这样做,这是一个非常糟糕的主意 继承是你想要的 您要做的是创建一个新模块,将模块事件作为模块的依赖项。然后,您可以使用视图定义中的this创建

是否有一个直接的过程将一个模块复制到一个具有自己依赖项的新模块名

在我的示例中,我需要创建一个非常类似于事件模块的模块,但我还需要原始形式的事件模块


我认为最简单的方法是将事件模块复制到一个新的模块名,然后对其进行更改。

是的,您可以这样做。。。但是您必须重构与事件模块不同的模块名称、模型名称、视图(表单、树、操作)名称。因此,您的事件模块没有堆积起来。

不要这样做,这是一个非常糟糕的主意

继承是你想要的 您要做的是创建一个新模块,将模块
事件作为模块的依赖项。然后,您可以使用视图定义中的this创建继承现有视图的新视图:

<field name="inherit_id" ref="xml_id_of_view" />
我不会详细介绍关于继承的3种可能的方法来保持它的简短,但是

  • 将模型定义复制到一个新模型中,这样您就基本上拥有了相同的东西,就好像您在继承模型之前复制了包含从其他依赖项加载的扩展的代码一样

  • 只需添加新函数扩展模型,基本上共享数据,但可以通过添加类型和正确过滤模型来避免。例如,您希望事件的类型在逻辑上保持它们的分离,同时将它们保持在同一个表中。这样做的好处是把事情放在一起。因此,如果您想在日历中显示多种类型的事件,这是可能的

  • 这将创建一个新表,其中一些数据保存在不同的表中,而新的数据保存在新模型表中。换句话说,当您创建此新模型时,您将创建此模型和被委派的模型。一个例子是举办活动和度假。假日类型将保留在其表中,您可以列出所有假日,但每个假日都将链接到带有日期的事件,依此类推。这有点像继承方法2的类型,只是数据被隔离在不同的表中。例如,假日将在日历event.event中可见,但不会显示event.holiday中定义的任何内容。event.event不知道什么是event.holiday。(例如,res.users->res.partner正在使用此方法)

  • 话虽如此,方法2在速度上并没有任何实现成本,方法1也会很快,因为数据保存在它自己的表中,但如果模块扩展了模型,并且不在依赖关系树中,那么对模型所做的更改将不可见,因此它不会100%复制模式

    当您希望保持数据规范化时,方法3是很好的,因为每个表都拥有它需要存在的数据,并且模型的整个数据可以跨多个具有隐式one2one关系的表

    还有观点的继承 此外,还可以通过设置primary=True来继承视图以创建新视图

    视图匹配

    • 如果(模型,类型)请求视图,则匹配具有正确模型和类型、模式=主且优先级最低的视图
    • 当id请求视图时,如果其模式不是主视图,则匹配与主视图模式最接近的父视图

    将视图设置为主视图本质上告诉Odoo将其视为顶视图,因此它不扩展其继承的视图,而是用扩展创建新视图。这可用于创建新模型,以防止自定义更改影响没有扩展的模型的视图

    可以更改视图的模型以处理不同的模型。例如,可以通过继承event.event视图并将模型设置为event.holiday并将视图类型更改为primary=True来处理假日模型。扩展此新视图的任何其他模块都不会对父event.event视图产生任何影响

    为什么不复制整个模块: 至于为什么复制现有模块是个坏主意。当你复制一个模块时,你是在自己维护代码。因此,从一个版本到另一个版本的任何更改或事件模块中修复的错误都不会出现在您的模块中,除非您手动将事件模块中的代码更改为事件模块中的代码

    然后你可能会认为这很好,可以侥幸逃脱,但现在你会想从odoo12升级到odoo13。您的模块必须进行移植,如果您想回滚更改以创建一个扩展事件模块的模块,如上文所述。您必须准确地记住从哪个提交派生模块。否则,您将很难进行区分,看看您引入了哪些更改,以及如何将其移植到odoo13。如果你只创建了一个扩展事件的模块,你将不得不移植你的更改,如果你幸运的话,你将不需要做任何更改,因为odoo8-10在某些模块中没有太大的更改,所以从一个版本移动到另一个版本通常是直接的,但是如果你复制了,你将在将来免费添加大量工作

    此外,这一切都是基于我在外包公司开发的项目和模块上工作后的个人经验。一些“开发”模块的人做的正是您想要实现的,我们花费了大量时间将这家公司所做的更改提取到销售点,从而生成了一个只有几行代码的模块。该模块使我们无法安装实际的销售点,我必须修复的模块是基于PoS的一个非常旧的版本,缺少关键的错误修复


    这根本不值得

    继承
    events
    module并添加依赖项。我对Odoo-Dev非常熟悉,但如果我将其作为依赖项包括进来,不就是安装它吗?我需要事件模块中的所有代码作为我的模块的起点此模块的目的是什么您想更改偶数模块中定义的内容,y
    # 1.
    class Event(models.Model):
        _name = "new_event"
        _inherit = "event.event"
    
    
    # 2.
    class Event(models.Model):
        _inherit = "event.event"
    
    # 3.
    class Holiday(models.Model):
        _name = "event.holiday"
        _inherits = {
           "event.event": "event_id"
        }
        event_id = fields.Many2one("event.event")