在odoo中,一般情况是通过界面的操作来安装/卸载
当然也可以通过python代码来实现相同的功能
代码卸载/安装模块
例 sale模块的操作:
卸载模块
modules = request.env['ir.module.module'].search([('name','=', 'sale')])
if modules:
modules.button_immediate_uninstall()
安装模块
modules = request.env['ir.module.module'].search([('name','=', 'sale')])
if modules:
modules.button_immediate_install()
附加功能:
在XML文件中调用函数
<function model="library.book"
name="add_book_price"
eval="(ref('category_xml_id'), 20)"/>
@api.model
def add_book_price(self, category, amount_to_increase):
category_books = self.search([('category_id', '=', category.id)])
for book in category_books:
book.cost_price += amount_to_increase
安装模块
- 按钮
def btn_install(self):
modules = request.env['ir.module.module'].search([('name', '=', 'sale')])
if modules:
modules.button_immediate_install()
return {
'type': 'ir.actions.client',
'tag': 'reload',
}
- shell
odoo.conf 为配置文件 例:odoo17.conf
db_name 为数据库名称 例:odoo17
python odoo-bin shell -c odoo.conf -d db_name
crm_moduel = env['ir.module.module'].search([('name', '=','CRM')])
crm_moduel.button_immediate_install()
自定义按钮 升级模块
- 按钮
def btn_update(self):
current_module = self.env['ir.module.module'].search([('name', '=', 'sale_management')])
current_module.button_immediate_upgrade()
return {
'type': 'ir.actions.client',
'tag': 'reload',
}
- shell
python odoo-bin shell -c odoo.conf -d db_name
crm_moduel = env['ir.module.module'].search([('name', '=','CRM')])
crm_moduel.button_immediate_upgrade()
自定义按钮 卸载模块
- 按钮
@assert_log_admin_access
def button_uninstall_wizard(self):
""" Launch the wizard to uninstall the given module. """
return {
'type': 'ir.actions.act_window',
'target': 'new',
'name': _('Uninstall module'),
'view_mode': 'form',
'res_model': 'base.module.uninstall',
'context': {'default_module_id': self.id},
}
- shell
python odoo-bin shell -c odoo.conf -d db_name
crm_moduel = env['ir.module.module'].search([('name', '=','CRM')])
crm_moduel.button_immediate_uninstall()