TypeError: appliquer () принимает как минимум 4 аргумента (2 дано) - PullRequest
1 голос
/ 09 мая 2019

Это моя функция:

@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 голосов
/ 09 мая 2019

Здесь вы смешиваете новый API со старым API.Вы украсили appliquer() с api.multi.Этот декоратор позволяет оболочке, которая обрабатывает старые и новые методы стиля API, обернуть метод как метод API нового стиля.

Вызывая этот метод для кнопки, Odoo заполняет параметры двумя аргументами, но вашвместо этого метод принимает значение 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,
    }
...