Django ORM - Фильтр по диапазонам нескольких столбцов

У меня есть требование получить данные (как i_week, так и i_year) за последний год от текущей даты. Таблица имеет следующие столбцы. Назовем таблицу temp.

  • i_week - Номер недели [1,52]
  • i_year - Год
  • Other columns

Я знаю, как получить данные с помощью SQL (Postgres). Вот запрос:

SELCT "i_week", "i_year" FROM "temp" WHERE ("i_week", "i_year") BETWEEN (1, 2021) AND (52, 2022);

На данный момент я пробовал использовать Django ORM следующим образом:

temp.objects.filter(i_week__range=(previous_week, current_week), i_year__range=(previous_year, current_year))

Но это не дает мне желаемого результата.

Как я могу выполнить вышеприведенный SQL-запрос, используя Django ORM? Как я могу фильтровать диапазоны i_week и i_year одновременно в ORM ?

давайте просто упомянем метод объекта Q. Вы можете попробовать выполнить ORM-запрос таким образом:

from django.db.models import Q

temp.objects.filter(
Q(i_week__range=(previous_week, current_week)) & 
Q(i_year__range=(previous_year, current_year))
)
Вернуться на верх