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

Odoo 15中如何获取account.move.line模型的tax_ids字段值?

解决Odoo中获取account.move.line对应税ID的问题

问题根源分析

  1. 代码逻辑错误:你用account.move的ID去查询account.move.line的ID,这两个模型的ID完全独立、无关联关系。偶尔能获取到ID只是巧合(刚好某个行记录的ID和当前发票ID相同),并非正确的关联方式。
  2. 字段存储方式误解:tax_ids是Many2many字段,Odoo不会在account_move_line表中直接存储该字段,而是通过中间关联表(比如account_move_line_account_tax_rel)维护行记录与税的关联,所以直接查account_move_line表看不到这个字段是正常的。

正确实现方式

要获取发票对应的行记录及关联税ID,应通过account.move的line_ids字段(One2many关联到account.move.line)获取对应行,再读取每行的tax_ids:

def _post(self, soft=True):
    super()._post(soft=soft)  # 不要忘记调用父类的_post方法
    for move in self:
        # 遍历当前发票的所有行记录
        for line in move.line_ids:
            # 过滤掉标题、备注等非交易行(可选,根据业务需求调整)
            if line.display_type not in ('line_section', 'line_note'):
                # 获取该行关联的税ID列表
                tax_id_list = line.tax_ids.ids
                print(f"行记录ID {line.id} 对应的税ID: {tax_id_list}")

额外说明

  • 如果需要直接通过数据库查询,可查询中间关联表,示例SQL(适用于Odoo 14+):
    SELECT aml.id AS line_id, at.id AS tax_id
    FROM account_move_line aml
    JOIN account_move_line_account_tax_rel rel ON aml.id = rel.account_move_line_id
    JOIN account_tax at ON rel.account_tax_id = at.id
    WHERE aml.move_id = 你的发票ID;
    
  • 不同Odoo版本的字段名可能有差异(比如旧版本可能用invoice_line_tax_id),可通过开发者模式查看模型字段确认。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 01:55:17