【问题标题】:How to get all records from ir.attachment with search in Odoo 13?如何在 Odoo 13 中通过搜索从 ir.attachment 获取所有记录?
【发布时间】:2020-12-23 17:49:43
【问题描述】:
根据这个答案:what does attachment=True do odoo 13
当您执行self.env['ir.attachment'].search([]) 时,您不会得到设置了res_field 的记录,顺便说一下,这些记录通常是表的大部分。
当然,我需要获取确实设置了res_id 字段的记录。有没有办法通过ORM 搜索来做到这一点?
或者我是否必须改为执行 SQL 查询?我想你们中的许多人都需要这样做一次。尊重 ORM 有什么好主意吗?
【问题讨论】:
标签:
python
python-3.x
odoo
odoo-13
【解决方案1】:
我想如果你想尊重 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 查询
对不起,我的英语学得不好。我正在努力学习它。
【解决方案2】:
如果不存在,Odoo 将在域中添加res_field=False(它会在更改搜索域之前检查域中是否存在id 或res_field 字段),因此如果您提供id 或@987654325 @Odoo 不会强制你搜索res_field 设置为False 的记录。
以下域应返回ir.attachment 中的所有记录:
['|', ('res_field', '!=', False), ('res_field', '=',False)]