[IMP] gamification, google_drive, project: limit usage of search on ir.model

Purpose of this commit is to globally improve code performance by limiting
search impact by using cache when accessing ir.model.

Note that tests are left untouched as they are generally done using admin
(or at least data preparation is done as admin). Diff is kept small currently.

Task-2638444
PR odoo/odoo#76005

Co-Authored-By: Thibault Delavallée <tde@odoo.com>
Co-Authored-By: Victor Feyens <vfe@odoo.com>
This commit is contained in:
Thibault Delavallée
2021-09-08 07:56:03 +00:00
co-authored by Victor Feyens
parent 2625d92b8b
commit d875bcd79d
4 changed files with 15 additions and 16 deletions
+2 -4
View File
@@ -56,9 +56,7 @@ class Meeting(models.Model):
# super default_model='crm.lead' for easier use in addons
if self.env.context.get('default_res_model') and not self.env.context.get('default_res_model_id'):
self = self.with_context(
default_res_model_id=self.env['ir.model'].sudo().search([
('model', '=', self.env.context['default_res_model'])
], limit=1).id
default_res_model_id=self.env['ir.model']._get_id(self.env.context['default_res_model'])
)
defaults = super(Meeting, self).default_get(fields)
@@ -66,7 +64,7 @@ class Meeting(models.Model):
# support active_model / active_id as replacement of default_* if not already given
if 'res_model_id' not in defaults and 'res_model_id' in fields and \
self.env.context.get('active_model') and self.env.context['active_model'] != 'calendar.event':
defaults['res_model_id'] = self.env['ir.model'].sudo().search([('model', '=', self.env.context['active_model'])], limit=1).id
defaults['res_model_id'] = self.env['ir.model']._get_id(self.env.context['active_model'])
defaults['res_model'] = self.env.context.get('active_model')
if 'res_id' not in defaults and 'res_id' in fields and \
defaults.get('res_model_id') and self.env.context.get('active_id'):
+10 -10
View File
@@ -262,18 +262,18 @@ class Challenge(models.Model):
for challenge in self:
if challenge.last_report_date != fields.Date.today():
# goals closed but still opened at the last report date
closed_goals_to_report = Goals.search([
('challenge_id', '=', challenge.id),
('start_date', '>=', challenge.last_report_date),
('end_date', '<=', challenge.last_report_date)
])
if challenge.next_report_date and fields.Date.today() >= challenge.next_report_date:
challenge.report_progress()
elif closed_goals_to_report:
# some goals need a final report
challenge.report_progress(subset_goals=closed_goals_to_report)
else:
# goals closed but still opened at the last report date
closed_goals_to_report = Goals.search([
('challenge_id', '=', challenge.id),
('start_date', '>=', challenge.last_report_date),
('end_date', '<=', challenge.last_report_date)
])
if closed_goals_to_report:
# some goals need a final report
challenge.report_progress(subset_goals=closed_goals_to_report)
self._check_challenge_reward()
return True
+1 -1
View File
@@ -154,7 +154,7 @@ class GoogleDrive(models.Model):
'''
# TO DO in master: fix my signature and my model
if isinstance(res_model, str):
res_model = self.env['ir.model'].sudo().search([('model', '=', res_model)]).id
res_model = self.env['ir.model']._get_id(res_model)
if not res_id:
raise UserError(_("Creating google drive may only be done by one at a time."))
# check if a model is configured with a template
@@ -21,7 +21,8 @@ class ProjectShareWizard(models.TransientModel):
@api.model
def _selection_target_model(self):
return [(model.model, model.name) for model in self.env['ir.model'].sudo().search([('model', '=', 'project.project')])]
project_model = self.env['ir.model']._get('project.project')
return [(project_model.model, project_model.name)]
access_mode = fields.Selection([('read', 'Readonly'), ('edit', 'Edit')])
display_access_mode = fields.Boolean()