这是我的功能:
@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)
我尝试了很多解决方案,但是都没有用。
答案 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,
}