根据这个答案:什么是attachment=True do odoo 13
执行self.env['ir.attachment'].search([])
时,不会得到设置了res_field
的记录,顺便说一句,这些记录通常是表的大部分。
当然,我需要获取确实设置了res_id
字段的记录。有没有黑客可以通过ORM
搜索做到这一点?
还是我必须执行SQL查询?我想你们很多人都需要做一次。尊重ORM有什么好主意吗?
我认为如果你想尊重ORM,你会自定义搜索方法。
我习惯了一次搜索方法,你可以试试
from odoo.osv import expression
class Test():
def search(records, domain, *args, **kwargs):
return search.origin(records, expression.AND([[('id', '=', instance.id)], domain]), *args, **kwargs)
self.registry['odoo.instance']._patch_method('search', search)
如果尝试失败,则必须执行SQL查询
对不起,我英语学得不太好。我正在努力学习。
Odoo将在域中添加res_field=False(在更改搜索域之前,它将检查域中是否存在id
或res_field
字段(,因此如果您提供id
或res_field
,Odoo将不会强制您搜索res_field
设置为False
的记录。
以下域应返回ir.attachment
:中的所有记录
['|', ('res_field', '!=', False), ('res_field', '=',False)]