【问题标题】:Domain field many2one based on another many2one field Odoo 11域字段 many2one 基于另一个 many2one 字段 Odoo 11
【发布时间】:2021-02-02 08:13:39
【问题描述】:

大家好,我是 odoo 新手,我创建了一个模块来修改会计模块。我想修改供应商账单和客户发票,并且 ai 添加了一个名为 Budget 的新列来获取所有预算,这是我在选择预算时想要的一个 many2one 字段,仅显示与之相关的分析帐户。

class custom_accounting_edit(models.Model):
    _inherit = 'crossovered.budget.lines'

    analytic_account_id = fields.Many2one('account.analytic.account', 'Budget line')


class BillsEdit(models.Model):
    _inherit = 'account.invoice.line'

    budget_id = fields.Many2one('crossovered.budget', string='Budget')
    account_analytic_id = fields.Many2one('account.analytic.account',
                                          string='Budget line')

    @api.onchange('budget_id')
    def onchange_analytic_account_id(self):
        for rec in self:
            return {'domain': {'analytic_account_id': [('analytic_account_id', '=', rec.budget_id.id)]}}

enter image description here

【问题讨论】:

  • crossovered.budget引用account.invoice.line的字段名称是什么?
  • 你的意思是这个 account_analytic_id = fields.Many2one('account.analytic.account', string='Budget line')
  • 不,可能是在 crossovered.budget 模型中定义的 x2many 字段。
  • 这是我在 crossovered.budget "crossovered_budget_line = fields.One2many('crossovered.budget.lines', 'crossovered_budget_id', 'Budget Lines', states={'done': [(' readonly', True)]}, copy=True)"
  • 和 crossovered_budget_id 是 crossovered.budget.lines 中的一个字段

标签: odoo-11


【解决方案1】:

在包含表单中存在的值的伪记录上调用该方法,因此您不需要循环 self

您需要在域中使用id字段来过滤使用预算线分析帐户值的帐户(它将返回id字段值)。

您可以使用mapped,它将返回所有预算分析帐户的联合,并删除重复项。

@api.onchange('budget_id')
def onchange_analytic_account_id(self):
    return {'domain': {'account_analytic_id': [
        ('id',
         'in',
         self.mapped('budget_id.crossovered_budget_line.analytic_account_id.id')
         )]
    }
    }

【讨论】:

  • 非常感谢,伙计,你拯救了我的一天,它就像一个魅力。
  • 你好朋友,我需要你的帮助。我有一个自定义会计模块继承自 odoo 会计模块。我已经创建了一个预算,一个预算有一个负责人,以及一个与这个预算相关的分析账户。我想根据与特定预算相关的分析帐户创建供应商账单和客户发票,并且我想在我创建新账单或发票时向负责预算的人发送电子邮件通知消息以通知他带有一条消息(已创建新账单,您需要对其进行验证)。
  • 所以您需要在创建发票时自动向负责人发送电子邮件?
  • 确切的发票或账单
  • 我在How to send mail automatically回答了你的问题。
【解决方案2】:

试试这个

@api.onchange('budget_id')
def onchange_analytic_account_id(self):
    account_ids = [line.analytic_account_id.id for line in self.budget_id.crossovered_budget_line]
    return {'domain': {'analytic_account_id': [('id', 'in', account_ids)]}}

【讨论】:

  • 给出了这个错误" raise ValueError("Expected singleton: %s" % self) ValueError: Expected singleton: crossovered.budget.lines(6, 7)"
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多