首页 > 解决方案 > create_from_ui() 接受 2 个位置参数

问题描述

您好,我尝试将 odoo 12 模块移植到 odoo 13 并收到此类错误消息。也许有人可以解释如何解决错误情况?也许有简单的解决方案?我对odoo真的很陌生,所以请尽可能多地给我知识。在那种情况下,可能会有一位更优秀的模块开发人员成长并开发一些免费模块:)

有代码:

@api.model
    def create_from_ui(self, orders):
        submitted_references = [o['data']['name'] for o in orders]
        pos_order = self.search([('pos_reference', 'in', submitted_references)])
        existing_orders = pos_order.read(['pos_reference'])
        existing_references = set([o['pos_reference'] for o in existing_orders])
        orders_to_save = [o for o in orders if o['data']['name'] not in existing_references]
        order_ids = []

        order_to_update = [o for o in orders if o['data']['name'] in existing_references]
        # Keep only new orders
        for tmp_order in orders_to_save:
            to_invoice = tmp_order['to_invoice']
            order = tmp_order['data']
            if to_invoice:
                self._match_payment_to_invoice(order)
            pos_order = self._process_order(order)
            order_ids.append(pos_order.id)

            try:
                pos_order.action_pos_order_paid()
            except psycopg2.OperationalError:
                # do not hide transactional errors, the order(s) won't be saved!
                raise
            except Exception as e:
                _logger.error('Could not fully process the POS Order: %s', tools.ustr(e))

            if to_invoice:
                pos_order.action_pos_order_invoice()
                pos_order.invoice_id.sudo().action_invoice_open()
                pos_order.account_move = pos_order.invoice_id.move_id

        # Update draft orders
        for tmp_order in order_to_update:
            for order in pos_order:
                if order.pos_reference == tmp_order['data']['name']:
                    pos_line_ids = self.env['pos.order.line'].search([('order_id', '=', order.id)])
                    if pos_line_ids:
                        pos_cids = []
                        new_cids = []
                        for line_id in pos_line_ids:
                            pos_cids.append(line_id.pos_cid)
                            for line in tmp_order['data']['lines']:
                                if line_id.pos_cid == line[2].get('pos_cid'):
                                    new_cids.append(line[2].get('pos_cid'))
                                    order.write({'lines': [(1, line_id.id, line[2])]})

                        for line in tmp_order['data']['lines']:
                            if line[2].get('pos_cid') not in pos_cids:
                                order.write({'lines': [(0, 0, line[2])]})
                                pos_cids.append(line[2].get('pos_cid'))
                                new_cids.append(line[2].get('pos_cid'))

                        newList = []
                        for item in pos_cids:
                            if item not in new_cids:
                                newList.append(item)

                        order_line_ids = self.env['pos.order.line'].search([('pos_cid', 'in', newList)])
                        if order_line_ids:
                            for each_line in order_line_ids:
                                each_line.unlink()

                    to_invoice = tmp_order['to_invoice']
                    order = tmp_order['data']
                    if to_invoice:
                        self._match_payment_to_invoice(order)
                    pos_order = self._process_order(order)
                    order_ids.append(pos_order.id)

                    try:
                        pos_order.action_pos_order_paid()
                    except psycopg2.OperationalError:
                        # do not hide transactional errors, the order(s) won't be saved!
                        raise
                    except Exception as e:
                        _logger.error('Could not fully process the POS Order: %s', tools.ustr(e))

                    if to_invoice:
                        pos_order.action_pos_order_invoice()
                        pos_order.invoice_id.sudo().action_invoice_open()
                        pos_order.account_move = pos_order.invoice_id.move_id
        self.broadcast_order_data(True)

        return order_ids

我得到的有错误:

  File "/usr/lib/python3/dist-packages/odoo/api.py", line 356, in _call_kw_model
    result = method(recs, *args, **kwargs)
TypeError: create_from_ui() takes 2 positional arguments but 3 were given

标签: odoo-13

解决方案


克拉西克

正如Error日志所暗示的那样,您采用的方法会odoo13随着arguments.

你可以在这里查看新的签名方法odoo13

谢谢


推荐阅读