Přejít na obsah
Menu
You need to be registered to interact with the community.
This question has been flagged
2 Odpovědi
5443 Zobrazení

I have been experiencing different issues with the number of arguments passed to a computed field and I´m confused on how this works, was hoping if someone could give me some guidance on how to troubleshoot the following error and explain when to use the different labels of @api.depends and @api.multi

Error:

result = self._fnct(obj, cr, uid, ids, name, self._arg, context)

TypeError: get_user() takes exactly 1 argument (7 given)

Code:

'make_visible':fields.function(get_user, string="User Visible", type="boolean"),
@api.depends('make_visible')  
def get_user(self, ): 
    user_crnt = self._uid
    res_user = self.env['res.users'].search([('id', '=', self._uid)]) 
    if res_user.has_group('hr_employee.GM'):
        self.make_visible = False 
    else: 
        self.make_visible = True
Avatar
Zrušit
Autor Nejlepší odpověď

Hello again.

     I still cant get it to work, I have tried differen ways but dont know how to distinguish between old api and new api.

This code gets me:

ValueError: dictionary update sequence element #0 has length 1; 2 is required

The code as simple as I could:

'make_invisible':fields.function(get_user, string="User Visible", readonly=0)
@api.multi  
def get_user(self ): 
    _logger.debug("This is GET_USER method ") 
    self.make_invisible=self.env['res.users'].has_group('hr_employee.GM')

The objective of this method is to define is logged user belongs to a certain group, because then I will use make_invisible flag to hide some fields to a certain group. NOTE: making the fields visible to certains groups is no option because it is a small group the one who should not see these fields.

Avatar
Zrušit
Nejlepší odpověď

@api.multi :- Self will be the current RecordSet without iteration

@api.depends:- This decorator will trigger the call to the decorated function if any of the fields specified in the decorator is altered by ORM or changed in the form.

reference

You are using old API for defining the computed field. seems to be wrong. look here

from openerp import api
total = fields.Float(compute='_compute_total')

@api.depends('value', 'tax')
def _compute_total(self):
    for record in self:
        record.total = record.value + record.value * record.tax

This is the new guideline to make a computed field.

reference

Avatar
Zrušit
Related Posts Odpovědi Zobrazení Aktivita
1
úno 18
5631
1
čvn 25
16125
3
dub 25
6681
0
bře 25
1722
0
led 25
3918