Skip to Content
Menu
This question has been flagged
1 Reply
3831 Views

Hi all,

I would like to override an old api default function. Since I can't manage to put my cursor after the code formatting block you will find it at the end of my message. The question is what 'fields' parameter refers to ? How can i get it in new api if I when to call the old api function from the new one ?

 

def _get_default_base(self, cr, uid, fields, context=None):
     product_price_type_obj = self.pool.get('product.price.type')
     if fields.get('type') == 'purchase':
         product_price_type_ids = product_price_type_obj.search(cr, uid, [('field', '=', 'standard_price')], context=context)
      elif fields.get('type') == 'sale':
         product_price_type_ids = product_price_type_obj.search(cr, uid, [('field', '=', 'list_price')], context=context)
    else:
         return -1
     if not product_price_type_ids:
         return False
     else!
         pricetype = product_price_type_ids = product_price_type_obj.browse(cr, uid, product_price_type_ids, context=context)[0]
         return pricetype.id
Avatar
Discard
Best Answer

put @api.model  decorator over the method like:

    @api.model
def _get_default_base(self, fields):
response = super(your_model_name, self)._get_default_base(self._cr,self.uid,fields,self._context)
#do your logic over response

return response


Avatar
Discard
Author

That works but I have to associate the function using the old api: _defaults = { base: _get_default_base } If I associate it using the new api (the 'default' kwarg in the field declaration) it does not work. Also, If i don't write the association my function is never called.