我能用这个错误做什么? ValueError:预期单身人士:sale.order.line(26,27)

时间:2016-05-18 16:56:14

标签: python openerp odoo-8 odoo-9

我正在修改sale.order.form中的按钮(确认销售),这样当我按下时,我立即获取库存(stock.picking.form)。这非常有效。但是当我想验证产品何时是可库存类型的功能时。仅当我在订单中仅选择一个产品时,它才有效。

问题是当我选择多个产品时,如下图所示:

enter image description here

这是“确认销售”按钮的功能。

@api.multi
def action_confirm(self):
    for order in self:
        order.state = 'sale'
        if self.env.context.get('send_email'):
            self.force_quotation_send()
        order.order_line._action_procurement_create()
        if not order.project_id:
            for line in order.order_line:
                if line.product_id.invoice_policy == 'cost':
                    order._create_analytic_account()
                    break
    if self.env['ir.values'].get_default('sale.config.settings', 'auto_done_setting'):
        self.action_done()

****这里开始改变职能****************

if self.order_line.product_id.product_tmpl_id.type in 'product':        

    action = self.env.ref('stock.action_picking_tree_all')

    result = {
        'name': action.name,
        'help': action.help,
        'type': action.type,
        'view_type': action.view_type,
        'view_mode': action.view_mode,
        'target': action.target,
        'context': action.context,
        'res_model': action.res_model,
    }

    pick_ids = sum([order.picking_ids.ids for order in self], [])

    if len(pick_ids) > 1:
        result['domain'] = "[('id','in',["+','.join(map(str, pick_ids))+"])]"
    elif len(pick_ids) == 1:
        form = self.env.ref('stock.view_picking_form', False)
        form_id = form.id if form else False
        result['views'] = [(form_id, 'form')]
        result['res_id'] = pick_ids[0]
    return result

如果有人可以帮我解决这个问题。它如何验证系统可以接受订单中的多个产品?非常感谢你的帮助。

1 个答案:

答案 0 :(得分:0)

我认为问题在于您使用self作为单例,并且由于该方法具有@ api.multi装饰器,因此它可以是一个列表。我认为,如果您的修改位于第一个for循环之下,那么如果您将代码更改为:

,则可能会有效
...
if order.order_line.product_id.product_tmpl_id.type in 'product':    
...

编辑:

当您在同一行中访问self.order_line时,也可能会引发异常。你做的就好像它是一个单独的元素,它也可以是一个列表。你应该遍历self.order_line列表:

...
for line in self.order_line:
  if line.product_id.product_tmpl_id.type in 'product':  
...