【问题标题】:Odoo11 - `create_invoices()` Error, Needs One Argument whereas Previosly Used with Two ArgumentsOdoo 11 - `create invoices()` 错误,需要一个参数,而以前使用两个参数
【发布时间】:2018-11-03 08:20:55
【问题描述】:

我正在为我公司的 Odoo 项目工作。

我之前的一位工程师(现已辞职)编写了一个 Go 脚本,该脚本会定期启动以根据销售订单创建发票。这个 Go 脚本运行良好。

现在,我们意识到创建发票也可以通过 Odoo 的自动/计划操作来完成。

我目前的任务是将他的 Go 脚本翻译成 Odoo 的自动动作。

但是,我有一个问题......

在他的 Go 脚本中有这样的代码:

param := []interface{}{
    c.cred.Db,
    c.uid,
    c.cred.Password,
    "sale.advance.payment.inv",
    "create_invoices",
    []int{
        paymentID,
    },
    map[string]interface{}{
        "context": map[string]interface{}{
            "active_id":    salesOrderID,
            "active_ids":   []int{salesOrderID},
            "active_model": "sales.order",
        },
    },
}

代码基本上是从模型"sale.advance.payment.inv"开始工作,然后调用方法create_invoices

第一个参数是支付对象。 第二个参数是一个 JSON/Python 字典,完全像这样:

{
    'context':
    {
        'active_id'   :  so['id'],
        'active_ids'  : [so['id']],
        'active_model': 'sales.order'
    }
}

我的自动操作是这样的:

paymentInAdvModel = env["sale.advance.payment.inv"]
paymentInAdv = paymentInAdvModel.create(
    {
        'advance_payment_method': 'delivered',
        'amount': 0,
    }
)

paymentInAdv.create_invoices(
    [paymentInAdv],
    {
        'context':
        {
            'active_id'   :  so['id'],
            'active_ids'  : [so['id']],
            'active_model': 'sales.order'
        }
    }
)

自动操作出现此错误:

ValueError: : “create_invoices() 接受 1 个位置参数,但给出了 3 个”在评估时

注意事项:

  • 表示"create_invoices"的方法只需要一个参数。我提供了两个参数,但错误说我输入了三个参数。我假设另一个参数是 Python 的self
  • 我拥有的唯一文档是在此链接中查看 Odoo GitHub 存储库:https://github.com/odoo/odoo/search?q=create_invoices&unscoped_q=create_invoices
    • 只引用一个名为create_invoices的函数,并且只接受一个参数。
  • Go 脚本运行良好。但是这个错误阻止了我将 Go 代码转换为 Python Odoo 的自动操作。

任何人都有解决方案,因此我可以使用 create_invoices() 与 Go 脚本相同的参数吗?

【问题讨论】:

    标签: python odoo erp odoo-11


    【解决方案1】:

    调用 create_invoice 方法时不需要传递列表,还需要使用 with_context() 方法传递上下文。

    试试下面的代码:

    ctx = {
        'active_id'   :  so['id'],
        'active_ids'  : [so['id']],
        'active_model': 'sales.order'
    }
    paymentInAdv.with_context(ctx).create_invoices()
    

    希望这会对你有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-24
      • 2021-07-18
      • 1970-01-01
      • 2021-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多