Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在odoo中返回多条记录时发生预期的单例错误?_Python_Orm_Odoo_Odoo 10_Refund - Fatal编程技术网

Python 在odoo中返回多条记录时发生预期的单例错误?

Python 在odoo中返回多条记录时发生预期的单例错误?,python,orm,odoo,odoo-10,refund,Python,Orm,Odoo,Odoo 10,Refund,这种方法可以从采购订单中获取产品价格,如果采购订单只有一条记录,则效果很好,否则我会得到这个错误 raise ValueError("Expected singleton: %s" % self) 这就是方法 @api.multi def create_refund_invoice(self): inv_obj = self.env['account.invoice'] for pick in self.filtered(lambda x:x.return_type):

这种方法可以从采购订单中获取产品价格,如果采购订单只有一条记录,则效果很好,否则我会得到这个错误

raise ValueError("Expected singleton: %s" % self)
这就是方法

@api.multi
def create_refund_invoice(self):
    inv_obj = self.env['account.invoice']
    for pick in self.filtered(lambda x:x.return_type):
        type = 'in_refund' if pick.return_type == 'purchase' else 'out_refund'
        inv_lines = {'type':type, 'partner_id':pick.partner_id.id, 'invoice_line_ids':[]}
        account = pick.return_type == 'sale' and pick.partner_id.property_account_receivable_id.id or pick.partner_id.property_account_payable_id.id
        inv_lines['account_id'] = account
        inv_lines['origin'] = pick.name
        inv_lines['name'] = pick.origin
        for line in pick.move_lines:
            name = line.product_id.partner_ref
            for rec in self:

                rec.order_id = line.env['purchase.order'].search([('name', '=', line.origin)]).order_line
                rec.price = rec.order_id.price_unit
            inv_lines['invoice_line_ids'] += [(0, None, {
                'product_id':line.product_id.id,
                'name':name,
                'quantity':line.quantity_done,
                'price_unit': rec.price,
                'account_id':line.product_id.product_tmpl_id.get_product_accounts()['income'].id})]
        if inv_lines['invoice_line_ids']:
            inv_id = inv_obj.create(inv_lines)
            pick.invoice_id = inv_id.id

任何帮助都将不胜感激。

对于odoo来说,当您获得多条记录时,您必须不能直接访问其字段值。

在您的代码中,您试图获取
采购订单
采购订单行
,一个订单中可能有多行可用

def create_refund_invoice(self):
    purchase_order_obj = self.env['purchase.order']
    inv_obj = self.env['account.invoice']
    for pick in self.filtered(lambda x:x.return_type):
        type = 'in_refund' if pick.return_type == 'purchase' else 'out_refund'
        inv_lines = {'type':type, 'partner_id':pick.partner_id.id, 'invoice_line_ids':[]}
        account = pick.return_type == 'sale' and pick.partner_id.property_account_receivable_id.id or pick.partner_id.property_account_payable_id.id
        inv_lines['account_id'] = account
        inv_lines['origin'] = pick.name
        inv_lines['name'] = pick.origin
        for line in pick.move_lines:
            name = line.product_id.partner_ref
            for rec in self:
                order_lines = purchase_order_obj.search([('name', '=', line.origin)]).order_line
                for pol in order_lines:
                    price = pol.order_id.price_unit
                    inv_lines['invoice_line_ids'] += [(0, None, {
                                            'product_id':line.product_id.id,
                                            'name':name,
                                            'quantity':line.quantity_done,
                                            'price_unit': price,
                                            'account_id':line.product_id.product_tmpl_id.get_product_accounts()['income'].id})
                                            ]
        if inv_lines['invoice_line_ids']:
            inv_id = inv_obj.create(inv_lines)
            pick.invoice_id = inv_id.id
我已经更新了上面的代码测试代码,并根据您的要求进行了更新