Эффективные способы фильтрации текущего и предстоящего месяцев в Odoo 15: подробное руководство

В Odoo 15 фильтрация данных на основе определенных диапазонов дат является общим требованием для многих компаний. Одним из таких сценариев является фильтрация записей за текущий месяц и предстоящий месяц. В этом сообщении блога мы рассмотрим несколько методов реализации этой функции фильтрации в Odoo 15, а также приведем примеры кода для каждого подхода.

  1. Метод 1: использование фильтрации доменов

    from datetime import date, timedelta
    from odoo import models
    class YourModel(models.Model):
    _inherit = 'your.model'
    def get_current_and_upcoming_month_records(self):
        today = date.today()
        first_day_of_current_month = today.replace(day=1)
        first_day_of_next_month = first_day_of_current_month.replace(month=first_day_of_current_month.month + 1, day=1)
        domain = [('your_date_field', '>=', first_day_of_current_month), ('your_date_field', '<', first_day_of_next_month)]
        records = self.search(domain)
        return records
  2. Метод 2: использование SQL-запросов

    from odoo import models, tools
    class YourModel(models.Model):
    _inherit = 'your.model'
    def get_current_and_upcoming_month_records(self):
        query = """
            SELECT *
            FROM your_model
            WHERE your_date_field >= date_trunc('month', NOW())
            AND your_date_field < date_trunc('month', NOW()) + INTERVAL '2 month'
        """
        self._cr.execute(query)
        records = self._cr.dictfetchall()
        return records
  3. Метод 3: использование модуля date_utils Odoo

    from odoo import models, fields
    from odoo.fields import date_utils
    class YourModel(models.Model):
    _inherit = 'your.model'
    your_date_field = fields.Date()
    def get_current_and_upcoming_month_records(self):
        today = fields.Date.today()
        first_day_of_current_month = date_utils.start_of(today, 'month')
        first_day_of_next_month = date_utils.start_of(today + relativedelta(months=1), 'month')
        records = self.search([
            ('your_date_field', '>=', first_day_of_current_month),
            ('your_date_field', '<', first_day_of_next_month)
        ])
        return records

Фильтрацию записей в Odoo 15 на основе текущего месяца и предстоящего месяца можно выполнить различными методами. В этой статье мы рассмотрели три различных подхода: использование фильтрации доменов, выполнение SQL-запросов и использование модуля date_utils Odoo. Эти методы обеспечивают гибкость и эффективность при работе с фильтрами на основе даты в Odoo 15. Реализуя эти методы, разработчики Odoo могут улучшить свои приложения с помощью точных и своевременных возможностей фильтрации данных.