You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用domain查询ir.attachment记录无结果,寻求技术指导

解决ir.attachment按res_model和res_id查询无结果的问题

以下是几个直接的排查方向和解决办法:

  • 验证res_id的类型与有效性
    Odoo中res_id字段为整数类型,如果data.get('res_id')返回字符串会导致匹配失败。先打印该值的类型和内容确认:

    print(type(data.get('res_id')), data.get('res_id'))
    

    若为字符串,转换为整数后再执行查询:

    attachments_items = request.env["ir.attachment"].sudo().search([
        ('res_model', '=', 'res.partner'), 
        ('res_id', '=', int(data.get('res_id')))
    ])
    
  • 确认目标res.partner记录确实关联了附件
    直接在Odoo后台打开对应的合作伙伴记录,查看「附件」标签页是否有上传文件。也可通过数据库SQL直接验证:

    SELECT * FROM ir_attachment WHERE res_model = 'res.partner' AND res_id = [你的res_id数值];
    

    若数据库无对应记录,说明该伙伴未关联任何附件,自然查询不到结果。

  • 检查res_model字段是否匹配准确
    部分场景下附件的res_model可能被误写为简写(比如partner而非res.partner),先查询所有关联res.partner的附件,确认目标res_id是否在其中:

    partner_attachments = request.env["ir.attachment"].sudo().search([('res_model', '=', 'res.partner')])
    print([att.res_id for att in partner_attachments])
    

    若列表中无目标res_id,说明该伙伴确实无关联附件。

  • 确认data字典中res_id参数的正确性
    打印data字典完整内容,检查res_id键是否存在、对应值是否为目标伙伴的正确ID:

    print(data)
    

    若res_id不存在或值错误,需排查前端传参或上游逻辑问题。

  • 考虑是否包含归档附件
    Odoo默认查询会过滤active=False的归档记录,若附件被归档,需在domain中显式包含:

    attachments_items = request.env["ir.attachment"].sudo().search([
        ('res_model', '=', 'res.partner'), 
        ('res_id', '=', data.get('res_id')),
        ('active', 'in', [True, False])
    ])
    

内容的提问来源于stack exchange,提问作者Muhammad Saleem

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 09:05:25