有没有办法在OpenERP中获取已删除记录列表?我听说openerp记录了已删除的记录列表..但我不知道在哪里浏览它..
我正在尝试同步两个数据库。所以我几乎不需要删除记录的模型名称和id,以便我可以从其他数据库中删除相应的记录
答案 0 :(得分:2)
您可以根据 base_action_rule 模型制作类似 replication_automated_rule 的内容。在 addons / base_action_rule / base_action_rule.py 中查找代码。
操作规则将服务器操作链接到完成给定条件(由过滤器定义)的对象(给定模型)。即使在管理界面上,操作规则也非常易于使用。
在创建和更新上检查对象,但您可以继承 base_action_rule 并定义对删除也。它的工作原理是为创建创建自定义包装器,并为模型对象的内存表示创建 write 方法。您需要添加基于 _wrap_create 的 _wrap_unlink 方法,并在 _register_hook 中添加一行:
model_obj.unlink = self._wrap_unlink(model_obj.unlink, model)
_wrap_create 和 _wrap_update 中的包装器方法在执行其正常功能后执行挂钩。当您在 _wrap_unlink 中定义包装器方法时,您应该在unlink的正常功能之前执行钩子,因为取消链接擦除对象并且它不会可用于挂钩。
此外,您应该定义服务器操作,它会为复制队列或日志保存必要的数据。
祝你好运!!答案 1 :(得分:1)
当您在openerp中单击从UI中删除时,您可以访问ORM Menthod UNLINK
原型od方法:
def unlink(self, cr, uid, ids, context=None)
"""
#Delete records with given ids
Param cr: database cursor
Param uid: current user id
Param ids: id or list of ids
Param context: (optional) context arguments, like lang, time zone
Return : True
Raise AccessError:
if user has no unlink rights on the requested object
if user tries to bypass access rules for unlink on the requested object
Raise UserError:
if the record is default property for other records
"""
这里的Ids包含要取消链接的ID列表,所以在删除之前你可以使用它们。
但是如果记录一旦从OpenERP中删除,就无法访问,因为它们不再是db。
可选,此处的机制可用于active
字段。 OE中的活动字段是特殊字段,如果您在模型上定义活动布尔字段,那么如果任何记录设置为活动false,哟无法在没有特别努力的情况下在视图上看到该记录,但是Tricky部分是您仍然在桌面上有活动的那些记录= False,因此您可以使用域名轻松访问它们。
答案 2 :(得分:1)
我得到了答案。
我从osv.osv继承了类 object_proxy ,在其中有一个名为执行的函数,def execute(self, db, uid, model, method, *args, **kw):
我只是覆盖了这个函数,如果方法取消链接然后我将record_id和模型名称保存到数据库中的新表
答案 3 :(得分:0)
我认为jam's suggestion是您在要复制的任何模型上覆盖unlink()
方法,并将已删除的ID记录到单独的表中。然后,您的同步过程可以读取并清除该表。
如果您只想复制整个数据库,也可以查看replication tools at the database level。