odoo - 当我按下“重复”按钮时,到底会发生什么?

标签 odoo

我对 OpenERP 复制感到疯狂,如果我复制员工目录中的用户,它会复制所有内容(系统的每个用户),如果我复制一个组,它只会复制一些内容,显然它不会创建副本。 ..如果我复制菜单,它不会复制子菜单选项。

WTF 会在“幕后”重复做事吗?副本和副本一样吗?它是否创建一个指向同一对象的新引用?是浅拷贝还是深拷贝?

我使用的是 OpenERP 7 LTS。

最佳答案

重复的菜单调用 OpenERP copy 方法,该方法默认实现为浅拷贝,但 one2many 除外。关系。

浅复制表示创建记录的新副本,并将所有字段值尽可能复制为引用。例如,如果您复制一名员工,则复制员工的部门将简单地设置为与被复制员工相同的部门,系统将不会创建该部门的副本。

对于 one2many 关系(通常是连接父记录与其子记录的关系,如发票与其行之间的关系),子记录也会重复,因为原始记录不能从他们原来的 parent 那里被剥夺。
one2many 关系将记录连接到并非真正其子项的“相关记录”时,此默认行为可能会导致不可预见的副作用:例如 one2many 关系可以链接员工到她的时间表条目,但当员工重复时,这些条目绝对不应该重复。

因此,OpenERP的各种对象模型可以在复制操作期间实现额外的逻辑,并显式关闭不包含真实“的one2many”关系的复制Children”,以及更改任何复制的值(例如在记录名称中附加“(副本)”)。

如果您在仅使用标准 OpenERP 模块复制记录时看到不正确的行为,则可能是一个错误,应在 official bugtracker 上报告。 。如果您使用额外的模块,请确保它们不会在某些模型上添加 one2many 字段,而不相应地覆盖 copy 方法。

PS:如果您复制“员工目录”中的记录,您实际上是在复制员工(人力资源资源),而不是用户(具有登录访问权限的用户帐户)。这些在 OpenERP 中是独立的概念,因为有些员工可能不需要登录(没有用户帐户),而有些用户可能不是员工(例如承包商或系统帐户)。

更新:a bug目前OpenERP 7.0中存在一个问题,在复制用户时会导致相关员工的无效复制,在复制员工时会导致下属的类似复制。这个错误说明了当模块无法正确处理它们定义的 one2many 关系的重复时会发生什么情况。

关于odoo - 当我按下“重复”按钮时,到底会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20335480/

相关文章:

python - 我可以填充 onChange 事件上的字段吗?

odoo - 了解 OpenERP 域过滤器?

python - 对象 (ctx: )>"上的 ValueError : Invalid field u'field' in leaf "<osv.ExtendedLeaf: (u' field', u'in', [59]) - Odoo v8

python - 如何根据 ids 搜索(向导)填充 many2many 字段

python-3.x - “request.website_multilang”在 Odoo 11 中导致 AttributeError

python - Odoo 10 : Catch the UserError and show it to webpage

xml - 如何在 odoo 12 中隐藏系统托盘菜单项

mysql - 在 Odoo 中上传 mySQL 或 XML 中的现有数据库

python - 从按钮搜索结果返回以显示在 OpenERP 的同一页面上

javascript - Odoo 更改基本 JavaScript 方法