With Odoo, managing any kind of data is easy. Any type of data can be created using XML files. On occasion, nevertheless, it will be necessary to install a module and perform an action in place of making a record on a model. In this blog, let's examine calling a method during module installation.
There are two methods for calling a function in XML.
1. Making use of a function with no arguments
2. Making an argument-based function call
I'll be using an XML file to invoke a method to create a new product in this blog post.
Let's first establish a group in Odoo in an XML file within the path. I'll then develop a module with the following files and folders.
data/product_data.xml.
1. Using a function without any parameters
Within this method, it's possible to call a function encapsulated within any model without the necessity of passing parameters.. The syntax is given below.
product_data.xml
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data noupdate="1">
<function model="product.template" name="my_product"/>
</data>
</odoo>
The <data> tag is a container for defining data records or operations.
The <data> tag serves as a container for specifying data records or processes, and when the noupdate attribute is set to 1, it indicates that any existing data matching the definitions in this file should remain unchanged in the database and not undergo updates.
<function model="product.template" name="new_product"/>
Inside the <data> tag, there is a <function> element. This particular element denotes an Odoo function call, specifically referencing the new_product function. The model attribute points to the Odoo model, in this instance, product.template, on which the function is intended to operate. Upon execution, the function will carry out a distinct action associated with the creation of a new product within the Odoo database.
To understand the implementation of the function, let's review its corresponding code in the Python file.
I have created a python file,product_template.py inside the directory models
product_template.py
from odoo import models, fields, api
class ProductTemplate(models.Model):
_inherit = "product.template"
@api.model
def my_product(self):
self.create(dict(name='My Product'))
class ProductTemplate(models.Model):
This line establishes a fresh Python class named ProductTemplate, which inherits characteristics from the models.Model class supplied by Odoo. The purpose of this class is to serve as a customized model for overseeing and organizing information related to products or contacts.
_inherit = "product.template"
The use of the _inherit attribute indicates that the custom model is building upon the base model, product.template, inheriting its fields and functionalities while also allowing for the introduction or alteration of specific behaviors.
@api.model
def my_productself):
The @api.model decorator is used to define a model-level method in Odoo. The func_without_params method exclusively accepts the standard self parameter, referring to the current instance of the model, without any additional parameters.
self.create(dict(name='My product'))
Within the func_without_params method, the following line utilizes the create method inherited from the base model to generate a new product entry in the database. The product record is instantiated with the name 'My product' by providing a dictionary containing the necessary field values.
2. Using a function with parameters
Within this method, invoking a function defined within any model is achieved by passing the necessary parameters.
product_data.xml
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data noupdate="1">
<function model="product.template" name="func_without_params">
<value>Calculator</value>
</function>
</data>
</odoo>
We have a "value" tag with the value "Calculator" within the "function" element. The func_without_params function receives this value either as an argument or directly as a provided value during its execution.
product_template.py
class ProductTemplate(models.Model):
_inherit = "product.template"
@api.model
def func_with_params(self, name):
self.create(dict(name=name))
One name for a parameter is required by the func_with_params method. Utilizing the create method not only creates new entries to the product.template table but also employs the provided name argument to generate the corresponding record.
By following this approach, you can trigger the execution of a function from XML files in Odoo 17.