You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

83 lines
2.5 KiB
Python

# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import models, fields, api, tools
class BaseModel(models.Model):
_name = 'test_performance.base'
_description = 'Test Performance Base'
name = fields.Char()
value = fields.Integer(default=0)
value_pc = fields.Float(compute="_value_pc", store=True)
value_ctx = fields.Float(compute="_value_ctx")
partner_id = fields.Many2one('res.partner', string='Customer')
line_ids = fields.One2many('test_performance.line', 'base_id')
total = fields.Integer(compute="_total", store=True)
tag_ids = fields.Many2many('test_performance.tag')
@api.depends('value')
def _value_pc(self):
for record in self:
record.value_pc = float(record.value) / 100
@api.depends_context('key')
def _value_ctx(self):
self.env.cr.execute('SELECT 42') # one dummy query per batch
for record in self:
record.value_ctx = self.env.context.get('key')
@api.depends('line_ids.value')
def _total(self):
for record in self:
record.total = sum(line.value for line in record.line_ids)
class LineModel(models.Model):
_name = 'test_performance.line'
_description = 'Test Performance Line'
base_id = fields.Many2one('test_performance.base', required=True, ondelete='cascade')
value = fields.Integer()
def init(self):
# line values should be unique per "base" - useful for testing corner cases with unique lines
tools.create_unique_index(self._cr, 'test_performance_line_uniq', self._table, ['base_id', 'value'])
class TagModel(models.Model):
_name = 'test_performance.tag'
_description = 'Test Performance Tag'
name = fields.Char()
class Bacon(models.Model):
_name = 'test_performance.bacon'
_description = 'Test Performance Bacon'
property_eggs = fields.Many2one(
'test_performance.eggs', company_dependent=True, string='Eggs')
class Eggs(models.Model):
_name = 'test_performance.eggs'
_description = 'Test Performance Eggs'
name = fields.Char()
class Mozzarella(models.Model):
_name = 'test_performance.mozzarella'
_description = 'Test Performance Mozzarella'
value = fields.Integer(default=0, required=True)
value_plus_one = fields.Integer(compute="_value_plus_one", required=True, store=True)
@api.depends('value')
def _value_plus_one(self):
for record in self:
record.value_plus_one = record.value + 1