odoo14计算属性获取结束时间减开始时间后的总用时
时间: 2023-07-29 12:10:31 浏览: 39
在Odoo14中,可以使用计算属性来计算结束时间减开始时间后的总用时。假设开始时间字段为`start_time`,结束时间字段为`end_time`,总用时字段为`total_time`,则可以创建如下的计算属性:
```python
from odoo import models, fields, api
from datetime import datetime
class MyModel(models.Model):
_name = 'my.model'
start_time = fields.Datetime(string='Start Time')
end_time = fields.Datetime(string='End Time')
total_time = fields.Float(string='Total Time', compute='_compute_total_time', store=True)
@api.depends('start_time', 'end_time')
def _compute_total_time(self):
for record in self:
if record.start_time and record.end_time:
start = datetime.strptime(record.start_time, '%Y-%m-%d %H:%M:%S')
end = datetime.strptime(record.end_time, '%Y-%m-%d %H:%M:%S')
delta = end - start
record.total_time = delta.total_seconds() / 3600
```
在上述代码中,我们定义了一个计算属性`total_time`,它依赖于`start_time`和`end_time`字段。当`start_time`或`end_time`字段发生变化时,计算属性会重新计算。在计算属性的方法`_compute_total_time`中,我们首先检查`start_time`和`end_time`是否都存在,然后将它们转换为`datetime`对象,并计算时间差`delta`。最后,将时间差转换为小时数,并将结果存储在`total_time`字段中。
请注意,我们将`total_time`字段设置为`store=True`,这意味着Odoo会将计算结果存储在数据库中,以便我们可以使用它进行排序和搜索。如果您不需要对`total_time`进行排序或搜索,您可以将`store`参数设置为`False`,这样Odoo就不会在数据库中存储这个字段。