Init Hooks
Hooks are functions that run before, after, or in place of existing code. Hooks, functions that are displayed as strings, are contained in the __init__ .py file of an Odoo module.
Hooks are defined within a module's __manifest .py file using the keywords listed below.
The types of hooks used in Odoo include
- post_init_hook
- pre_init_hook
- uninstall_hook
- post_load
1. post_init_hook
Post init hook functions are those that run after the module is installed. It is added with the function name inside the __init__.py file. It will generate some data. Cursors and registry are arguments that can be passed to the post init hook.
For example,
The below code generates the data for the student.student model.
from odoo import fields, models
class Student(models.Model):
_name = "student.student"
_description = "Student"
name = fields.Char(string="Name", required=True)
phone = fields.Char(string="Phone Number")
email = fields.Char(string="Email", required=True)
We can use the post_init_hook key to register the hook in the module's __manifest__.py file.
'post_init_hook': 'create_student',
The method defined in the post_init_hook will be executed, after the module has been installed.
In your __init__.py file, import the post_init_hook function and define it as shown below.
from odoo import api, SUPERUSER_ID
def create_student(cr, registry):
env = api.Environment(cr, SUPERUSER_ID, {})
env['student.student'].create({
'name': 'Student 1',
'phone': '+7865 6675 2341',
'email': 'student1@student.com'
})
2. Pre_init_hook
Pre Init Hooks are the hook operations that run before the installation of the module.
You can define a pre_init_hook function in your manifest file, as shown below.
'pre_init_hook': '_pre_init_student',
In the module's __init__ .py file, the _pre_init_student function should be defined.
3. Uninstall_hook
This function is called immediately after the module is uninstalled.
You can define a uninstall_hook function in your manifest file, as;
'uninstall_hook': 'uninstall_hook'
4.Post Load
Before any model or #data has been initialized, this can be done. You can define a post_load function in your manifest file, as shown below.
'post_load': 'post_load'