Вызов функции из другого класса (Odoo13) - PullRequest
0 голосов
/ 06 августа 2020

Я хочу вызвать ту же функцию из другого объекта-класса. Я пробую это, но не работает. Любая помощь, пожалуйста.

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 ]

1 голос
/ 07 августа 2020
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"/>
1 голос
/ 06 августа 2020

Один из способов сделать это - вы можете рассматривать ClassA как базовый / родительский класс и унаследовать его как от ClassB, так и от Class C. Следовательно, вы сможете получить доступ к атрибутам и методам ClassA из его дочерних классов, то есть ClassB и Class C.

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 как stati c method.

@staticmethod
def action_button():

Теперь вы можете использовать этот метод, вызывая ClassA.action_button() из любого класса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...