【问题标题】:Create batch records with Odoo create method使用 Odoo 创建方法创建批次记录
【发布时间】:2023-03-26 19:41:01
【问题描述】:

我正在尝试使用 odoo13 中的创建值从字典数组创建多张发票。 一次创建一条记录是可以的,但是当我尝试使用批处理记录时,我收到错误can't adapt to type dict

我已尝试遍历数组并为其中的每个项目创建一条记录,但此错误仍然存​​在。

我目前正在检查 @api.model_create_multi 装饰器,但还没有完全掌握它。

我想要的是为 visa_line 中的每一行(与订单行相同)创建发票。创建发票时缺少某些字段,但这不应该是问题。

当我打印记录时,在最终函数中,它会正确打印带有值的管道。

这是我的代码,提前谢谢你

    def _prepare_invoice(self):
        journal = self.env['account.move'].with_context(
            default_type='out_invoice')._get_default_journal()

        invoice_vals = {
            'type': 'out_invoice',
            'invoice_user_id': self.csa_id and self.csa_id.id,
            'source_id': self.id,
            'journal_id': journal.id,
            'state': 'draft',
            'invoice_date': self.date,
            'invoice_line_ids': []
        }
        return invoice_vals

    def prepare_create_invoice(self):
        invoice_val_dicts = []
        invoice_val_list = self._prepare_invoice()
        for line in self.visa_line:
            invoice_val_list['invoice_partner_bank_id'] = line.partner_id.bank_ids[:1].id,
            invoice_val_list['invoice_line_ids'] = [0, 0, {
                'name': line.code,
                'account_id': 1,
                'quantity': 1,
                'price_unit': line.amount,
            }]
            invoice_val_dicts.append(invoice_val_list)
        return invoice_val_dicts

    @api.model_create_multi
    def create_invoice(self, invoices_dict):
        invoices_dict = self.prepare_create_invoice()
        for record in invoices_dict:
            print(record)
            records = self.env['account.move'].create(record)

【问题讨论】:

  • invoice_line_ids的格式不对,应该是一个命令列表,其中每个命令都是一个三元组。
  • 但当前格式在我尝试创建单个发票时有效。
  • self.visa_line为空时invoice_line_ids的值为[]
  • 我认为如果您添加完整的错误日志会更有帮助。其他人可以轻松检查是哪一行代码导致了错误。
  • 抱歉耽搁了,这是确切的错误odoo13 odoo.sql_db: bad query: SELECT "account_move_line".id FROM "account_move_line" WHERE (("account_move_line"."move_id" in (%s)) AND (("account_move_line"."id" not in (%s)) OR "account_move_line"."id" IS NULL)) ORDER BY "account_move_line"."date" DESC,"account_move_line"."move_name" DESC,"account_move_line"."id" ERROR: can't adapt type 'dict'

标签: python odoo odoo-12 odoo-13


【解决方案1】:

我通过显式键入使用管道修复记录来解决此问题。使用不带@api.model_create_multi 的普通创建方法。

def create_invoice(self):
   invoices_dict = self.prepare_create_invoice()
   for record in invoices_dict:
       records = self.env['account.move'].create(dict(record))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-08
    • 1970-01-01
    • 2022-01-06
    • 1970-01-01
    相关资源
    最近更新 更多