This question has been flagged
2 Replies
6669 Views

I need to change both "create" and "write" BaseModel methods so that, whenever a record is created/edited (any data model), some code of mine should run.

Here's what I've done so far:


class BaseModelExtend(models.AbstractModel):

        _name = 'basemodel.extend'

        @api.model_cr

        def _register_hook(self):

                @api.model

                @api.returns('self', lambda value: value.id)

                def create(self, vals):

                        res = super(BaseModelExtend, self).create(vals) 

                       _logger.info("THIS IS OK")

                       return res

        models.BaseModel.create = create

        return super(BaseModelExtend, self)._register_hook()


I always get a TypeError: super(type, obj): obj must be an instance or subtype of type error!


Does anyone know the write syntax for this?

Avatar
Discard
Best Answer

The correct syntax would be:

class BaseModelExtend(models.AbstractModel):
        _name = 'basemodel.extend'
        @api.model_cr
        def _register_hook(self):
                origin_create = models.AbstractModel.create
                @api.model
                @api.returns('self', lambda value: value.id)
                def create(self, vals):
                        res = origin_create(self, vals) 
                       _logger.info("THIS IS OK")
                       return res
                models.AbstractModel.create = create
                return super(BaseModelExtend, self)._register_hook()
Avatar
Discard
Best Answer

we have already changed base method name_get, see this it may help.

from openerp.models import BaseModel
from openerp import api

@api.multi
    def name_get(self):
        result = []
       cr, uid, context = self.env.args
       if uid in context.keys():
            user = self.env['res.users'].browse(context.get('uid'))
if user:
for record in self:
result.append(record.name)
               return result
BaseModel.name_get = name_get                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   


Avatar
Discard