Ing
Ing

Reputation: 611

Call function from another class (Odoo13)

I want to call same function from another class-object. I try this but doesn't work.Any help please.

class ClassA(models.Model):
    _name = 'class.a'
        def action_button(self):
              ......
        }

class ClassB(models.Model):
    _name = 'class.b'
    def call_func_b(self):
        self.env["class.b"].action_button()

 <button name="call_func_b" type="object" string="Create Action b"/>


class ClassC(models.Model):
    _name = 'class.c'
    def call_func_c(self):
        self.env["class.c"].action_button()

 <button name="call_func_c" type="object" string="Create Action c"/>

Upvotes: 0

Views: 960

Answers (2)

Paxmees
Paxmees

Reputation: 1590

class ClassA(models.Model):
    _name = 'class.a'
    @api.model
    def action_button(self):
          # you can return action here if you want
          return action
     }

class ClassB(models.Model):
    _name = 'class.b'
    def call_func_b(self):
        #use return to pass data to client;
        #env["class.a"] finds model with provided name, you used same same models name 
        return self.env["class.a"].action_button()

 <button name="call_func_b" type="object" string="Create Action b"/>


class ClassC(models.Model):
    _name = 'class.c'
    def call_func_c(self):
        return self.env["class.a"].action_button()

<button name="call_func_c" type="object" string="Create Action c"/>

Upvotes: 1

Shivam Gera
Shivam Gera

Reputation: 41

One way of doing this is that you can consider ClassA as base/parent class and inherit it in both ClassB and ClassC. Hence, you will be able to access ClassA's attributes and methods from its child classes, that is, ClassB and ClassC.

class ClassA(models.Model):
    _name = 'class.a'
    def action_button(self):
              ......
        }

class ClassB(ClassA):
    _name = 'class.b'
    def call_func_b(self):
        self.action_button()

 <button name="call_func_b" type="object" string="Create Action b"/>


class ClassC(ClassA):
    _name = 'class.c'
    def call_func_c(self):
        self.action_button()

 <button name="call_func_c" type="object" string="Create Action c"/>

Alternatively, you can define the action_button method as a static method.

@staticmethod
def action_button():

Now, you will be able to use this method by calling ClassA.action_button() from any class.

Upvotes: 1

Related Questions