如何在Odoo QWeb采购申请报表打印员工详情并解决属性错误
解决Odoo QWeb采购申请报表中员工部门/电话显示的AttributeError问题
问题原因
你遇到的AttributeError: 'res.partner' object has no attribute 'department_id'是因为找错了数据路径:部门、员工电话这些信息属于hr.employee模型,而你当前代码里的o.user_id.partner_id指向的是res.partner(用户关联的合作伙伴记录),这个模型本身并没有department_id字段。
正确解决方案
采购申请记录的user_id(res.users模型)通过employee_id字段关联到对应的hr.employee记录,我们需要从这个关联路径去获取员工的部门和电话信息。
修改后的QWeb代码示例
<tr> <!-- 员工部门 --> <td style="border:1px solid #000;padding-left:5px"> Department: <span t-esc="o.user_id.employee_id.department_id.name if o.user_id.employee_id else 'No Assigned Department'"/> </td> <!-- 员工工作电话 --> <td style="border:1px solid #000;padding-left:5px"> Work Phone: <span t-esc="o.user_id.employee_id.work_phone if o.user_id.employee_id else 'No Phone Number'"/> </td> </tr>
关键说明
- 数据关联路径:正确的关联链是
采购申请(o) → 用户(user_id) → 员工(employee_id) → 部门(department_id)/员工电话(work_phone/mobile_phone) - 空值判断:加入
if o.user_id.employee_id else ...的判断是为了避免部分用户未关联员工记录时出现新的报错,提升报表的健壮性 - 可选字段:如果需要显示员工手机号,可以把
work_phone替换为mobile_phone,这两个都是hr.employee模型的原生字段
内容的提问来源于stack exchange,提问作者user3606682
相关产品推荐
相关产品推荐

