Hola amigos, me gustaría saber si es posible filtrar sobre un campo computado que no es almacenado, ya que actualmente estoy haciendo un calculo de horas sobre tal campo pero gustaría poder filtrar si ese campo es mayor a 8 horas o menor, les dejo mi codigo, agregué el metodo search pero al buscarlo en el filtro el campo y aplicar el filtro se queda cargadno y tarda mucho, son alrededor de 16 mil registros, saludos
class CrmLeadActivity(models.Model):
_inherit = 'crm.lead'
elapsed_hours = fields.Float(string='Hours elapsed', compute='_compute_elapsed_hours', search='_search_hours_elapsed')
@api.depends('date_last_stage_update')
def _compute_elapsed_hours(self):
for record in self:
if record.x_stage_name in ['Proposition', 'Propuesta', 'Approve', 'Aprobado']:
user = self.env.user.partner_id
tz_name =
user.tz or 'America/Mexico_City'
tz_info = pytz.timezone(tz_name)
now = datetime.now(tz_info)
date_last_stage_update = datetime.strptime(record.date_last_stage_update ,"%Y-%m-%d %H:%M:%S")
local_dt = date_last_stage_update.replace(tzinfo=pytz.utc).astimezone(tz_info)
date_last_stage_update_tz = tz_info.normalize(local_dt)
time_elapsed = now - date_last_stage_update_tz
time_elapsed_hours = math.floor(time_elapsed.total_seconds() / 3600)
day = timedelta(days=1)
weekend_days = 0
while date_last_stage_update_tz <= now:
if date_last_stage_update_tz.weekday() in [5,6]:
weekend_days += 1
date_last_stage_update_tz = date_last_stage_update_tz + day
record.elapsed_hours = time_elapsed_hours - (weekend_days * 24)
def _search_hours_elapsed(self, operator, value):
return [('elapsed_hours', operator, value)]