TypeError:appliquer()至少接受4个参数(给定2个)

时间:2019-05-09 10:35:10

标签: python odoo odoo-8

这是我的功能:

@api.multi
def appliquer(self,cr,ids,uid, context= None):
    wizard = self.browse(cr, uid, ids[0], context)
    res=[]        
    for x in wizard:
        if x.vendeur:
            res.append(('user_id','=',x.vendeur.id))
        if x.agence_id:
            res.append(x.agence_id)        
        if x.open:
            res.append(x.ca)
        if x.draft:
            res.append(x.ca)
        if x.paid:
            res.append(x.ca)
        if x.dare_from and x.date_to:
            res.append(('date_from', '>=', x.date_from.id))
            res.append(('date_to', '<=', x.date_to.id)) 
    return {
        'name' : 'Chiffre d\'affaire',
        'view_type' : 'form',
        'view_mode' : 'tree,graph',
        'res_model' : 'ca.report',
        'type' : 'ir.actions.act.window',
        'target' : 'new',
        'res' : res,
    }

     }

此功能是从向导中显示一些树状视图,但是当我单击底部启动向导时,出现此错误:

TypeError: appliquer() takes at least 4 arguments (2 given)

我尝试了很多解决方案,但是都没有用。

1 个答案:

答案 0 :(得分:0)

您在这里将新API与旧API混合在一起。您已经用appliquer()装饰了api.multi。这个装饰器让我们处理新旧API样式方法的包装器将其包装为新样式API方法。

通过在按钮上调用此方法,Odoo会用2个参数填充参数,但您的方法将使用4个参数。

因此,您需要将参数更改为仅self(在新的按钮方法API中不需要更多参数),当然也可以使用self将其重写(无需浏览,依此类推...)或者,您只需删除装饰器。

编辑:因为我不再喜欢旧的API,并且由于现在不推荐使用,我将把您的方法迁移到新的API样式:

@api.multi
def appliquer(self):
    res = []
    for wizard in self:
        if wizard.vendeur:
            res.append(('user_id','=',wizard.vendeur.id))
        if wizard.agence_id:
            res.append(wizard.agence_id)        
        if wizard.open or wizard.draft or wizard.paid:
            res.append(wizard.ca)
        if wizard.dare_from and wizard.date_to:
            res.append(('date_from', '>=', wizard.date_from.id))
            res.append(('date_to', '<=', wizard.date_to.id)) 
    return {
        'name' : 'Chiffre d\'affaire',
        'view_type' : 'form',
        'view_mode' : 'tree,graph',
        'res_model' : 'ca.report',
        'type' : 'ir.actions.act.window',
        'target' : 'new',
        'res' : res,
    }