- 上传者: Administrator
- 上传时间:2023年11月19日 01时53分28秒
* Onchange with Compute Method ** *** Odoo's most commonly used techniques for achieving some kind of business logic is Onchange and compute logic. A ......
Onchange with Compute Method
Odoo's most commonly used techniques for achieving some kind of business logic is Onchange and compute logic. A field that uses values from other fields to calculate its value is known as a computed field. This method is used to compute the value of a computed field and is generally referred to as compute methods; onchange methods are methods triggered by a change in the field value.
Let's look at both scenarios using an example. Consider developing a business model for managing rental orders. Duration and price for the unit duration are used for calculating the amount for the total rent. For this purpose, let us define as in the following code a monetary field total_rent, which is a computed field, meaning that its value is determined by using the values of either one or more other fields.
from odoo import models, fields
class VehicleRental(models.Model):
_name = "vehicle.rental"
_description = "Vehicle Rental"
hour_rate = fields.Monetary(string="Hour Rate",)
hours = fields.Integer(string="Hours")
total_rent = fields.Monetary(string='Total Rent',
compute='_compute_total_rent')
def _compute_total_rent(self):
for record in self:
record.total_rent = record.hour_rate*record.hours
The value of computed fields is usually dependent on other fields. Therefore, it is preferable to include the dependencies in the compute method. The ORM expects that the developer will declare these dependencies using the method's decorator depends(). When a change occurs in the dependent fields, ORM uses the provided dependencies to trigger the compute method.
from odoo import models, fields, api
class VehicleRental(models.Model):
_name = "vehicle.rental"
_description = "Vehicle Rental"
hour_rate = fields.Monetary(string="Hour Rate",)
hours = fields.Integer(string="Hours")
total_rent = fields.Monetary(string='Total Rent',
compute='_compute_total_rent')
@api.depends('hour_rate', 'hours')
def _compute_total_rent(self):
for record in self:
record.total_rent = record.hour_rate*record.hours
With Odoo's Onchange mechanism, a field's value can be changed or updated if any updates are made to the values of the other fields. Additionally, the onchange is only activated in the form view and is triggered whenever one of the specified fields is modified in that view. In the given example, the Reference for the rental order is achieved from a method. The onchange() decorator allows the feature to call the onchange method whenever the value of the form's vehicle_id field changes.
from odoo import models, fields, api
class VehicleRental(models.Model):
_name = "vehicle.rental"
_description = "Vehicle Rental"
name = fields.Char(string="Ref.")
vehicle_id = fields.Many2one('fleet.vehicle', string="Vehicle")
@api.onchange('vehicle_id')
def _onchange_vehicle(self):
self.name = "Rental Order for %s" % self.vehicle_id.name
本文章从网上收集,如有侵权请联系tderp@tderp.com删除
- 微信扫一扫,一分也是爱:
服务原则及地区范围
宜兴通达网络科技有限公司,地处中国宜兴环科园内,是一家高新技术企业。公司在企业网络维护和企业信息化建设与咨询方面,有10多年经验。
我公司愿与客户一道,力求彻底解决客户问题!
我们不是在给企业提供“头痛医头、脚痛医脚”的暂时解决方案,而是在部署根本性安全与稳定服务!!
我们愿携手客户,建立企业IT规划;杜绝随意安装系统、软件等操作;力求共同维护有序、安全、稳定的网络办公环境!!!
IT服务,服务是根本,客户是上帝;我们提供快速响应、快速上门、快速排查,提供优质高效的服务!!!!
通达科技提供全国范围内的服务,服务形式包括远程协助、电话咨询、电子邮件咨询、传真咨询、问答平台的问题解决等。
宜兴地区提供上门服务:
- 市区服务:宜城街道、城北街道(屺亭街道)、新街街道、新庄街道、环科园、渚桥开发区
- 市郊服务:张渚镇、西渚镇、太华镇、徐舍镇、官林镇、杨巷镇、新建镇、和桥镇、高塍镇、万石镇、周铁镇、芳桥镇、丁蜀镇、湖父镇。