【发布时间】: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