python-3.x - Odoo 11 中 inverse_name 的意外行为

标签 python-3.x odoo odoo-11

您了解可用于 One2many 字段的 inverse_name 参数。它只是告诉 Odoo 相关 comodel 中哪个是强制的 Many2one 字段,以了解要显示的记录。

在标准模块account中,在account.invoice模型中,有一个名为move_id的Many2one字段。它与 account.move 模型相关,其目的是在验证此发票时显示为发票生成的日记帐分录。

我唯一想做的就是在日记帐分录表单 (account.move) 中显示其验证已生成该日记帐分录的发票 (account.invoice) 。所以这对我来说看起来很简单,我刚刚在 account.move 模型中创建了关系的其他部分:

invoice_ids = fields.One2many(
    comodel_name='account.invoice',
    inverse_name='move_id',
    string='Invoices whose validation generated this journal entry',
)

account.invoiceaccount.move 之间的逻辑应该是 1:1,但对于这种情况,我可以使用 1:N,因为 One2many 只是提供信息,并且对用户只读。所以这个似乎工作正常,我能够在日记帐分录中看到发票,但过了一会儿我意识到我已经用该代码破坏了工作流程。

这就是现在发生的情况,我用例子描述一下:

  1. 我创建并验证发票SALE/INV/00001

  2. 验证生成日记帐分录2019/00001。我可以在发票表单中看到此日记帐分录,并且可以在日记帐分录表单中(在我创建的 One2many 中)看到发票。对。

  3. 我支付了发票,但一切都崩溃了。付款生成日记帐分录 2019/00002,这没问题,但现在,在发票 SALE/INV/00001 中,我看到的是此日记帐分录,而不是 2019/00001,这是错误的,如果我转到日记帐分录的表单 2019/00001,我创建的用于显示相关发票的 One2many 字段为空,而付款生成的日记帐分录中的一个显示 SALE/INV/00001,而它本应为空。

我希望日记帐分录的 invoice_ids 字段仅显示验证生成该日记帐分录的发票,因为发票中的 move_id 仅显示验证生成的日记帐分录。

为了纠正这个问题,我在日记条目中将 One2many invoice_ids 替换为 Many2one invoice_id,并在 account.move 中自动填写此内容> ORM 创建方法。但这个解决方案没有链接数据库中的旧记录,我仍然不明白上述代码的行为。

那么,有人能解释一下吗?我想知道为什么 inverse_name 会有这样的行为。

最佳答案

在浪费了大量时间用日志消息填充核心之后,我发现了我不幸的问题。

当您通过标准方法支付发票时(单击注册付款按钮),将打开account. payment模型的弹出窗口。该模型已经有一个名为 invoice_ids 的字段,Odoo 正在使用打开弹出窗口的操作上下文,以使用当前发票自动填充该字段:

<field name="context">{'default_invoice_ids': [(4, active_id, None)]}</field>

接受付款后,将调用 account.move create 方法来生成付款日记帐分录。问题是操作的上下文仍然保留在该调用中,这意味着 Odoo 认为我想用该内容填充 account.move 的自定义字段 invoice_ids值(始终是事件 ID,我们保留的发票)...但这不是事实。

我想这真是运气不好。

最后我修复了它,只是修改了 One2many 字段的技术名称,以避免 Odoo 混淆:

validated_invoice_ids = fields.One2many(
    comodel_name='account.invoice',
    inverse_name='move_id',
    string='Invoices whose validation generated this journal entry',
)

关于python-3.x - Odoo 11 中 inverse_name 的意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55918002/

相关文章:

python-3.x - elasticsearch python parallel_bulk无法插入数据

python - 我可以在 python 中重载 -> 吗?

python - 如何在 Tkinter 应用程序上收听终端?

python - 如何在odoo中使用onchange one2many变量传递值?

session - Odoo 如何存储 session ?

python-3.x - 在 Odoo 环境中模拟?

python - 重复记录缺少 many2one 字段问题

python - 设置函数以字符串形式返回其结果值

python - 如何让webkit为表单生成报表?

odoo-11 - 如何在 XML Odoo V11 中获取当前(登录)用户?