Odoo: проверьте, установлен ли модуль - PullRequest
1 голос
/ 23 февраля 2020

Я хочу проверить, установлен ли модуль в odoo13. Когда я распечатываю счет, я хочу проверить в тот момент. Это код, который у меня есть.

class Moduletest(models.Model):
    _inherit = "account.move"


    module_manufacturer_installed = fields.Boolean(
        compute='_compute_module_manufacturer_installed',
        string='Is Module installed?',
    )

    @api.constrains
    def _compute_module_manufacturer_installed(self):
        print('##############################**************************')
        module_manufacturer_installed = False
        for record in self:
            module = self.env['ir.module.module'].search([
                ('name', '=', 'product_manufacturer')
            ])
            if module and module.state == 'installed':
                record.update({
                    'module_manufacturer_installed': True,
                })

Я сделал поле и хочу проверить состояние модуля. Функция работает, я проверил ее в других моделях, поэтому, я думаю, либо я наследую неправильную модель здесь "account.move", либо мой декоратор работает неправильно. Может кто-нибудь посоветовать. Спасибо

1 Ответ

2 голосов
/ 24 февраля 2020

Для вычислительных полей используйте api.depends, а не api.constrains, и когда вы используете зависимость, вы должны по крайней мере вызвать его без аргументов api.depends(), если у вас нет никакой зависимости от какого-либо поля:

module_manufacturer_installed = fields.Boolean(
                           compute='_compute_module_manufacturer_installed',
                           string='Is Module installed?')

@api.depends()
def _compute_module_manufacturer_installed(self):
    # don't repeat the same search for every record the result will not be changed
    module = self.env['ir.module.module'].search([
            ('name', '=', 'product_manufacturer')
        ])
    module_manufacturer_installed = True if module and module.state == 'installed' else False
    for record in self:
             # no need for update when you set only one field just use normal asignement 
            record.module_manufacturer_installed = module_manufacturer_installed 

@api.constrains используется для проверки значения поля после обновления его в базе данных, если значение неверно, должно возникнуть исключение, и это приведет к откату.

...