从另一个类调用函数(Odoo13)

时间:2020-08-06 10:46:44

标签: python odoo

我想从另一个类对象调用相同的函数。我尝试了一下,但是没有用。请任何帮助。

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"/>

2 个答案:

答案 0 :(得分:1)

执行此操作的一种方法是,您可以将ClassA视为基类/父类,并在ClassB和ClassC中继承它。因此,您将可以从其子类ClassB和ClassC访问ClassA的属性和方法。

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"/>

或者,您可以将action_button方法定义为静态方法。

@staticmethod
def action_button():

现在,您可以通过从任何类调用ClassA.action_button()来使用此方法。

答案 1 :(得分:1)

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"/>
相关问题