Фильтрация набора запросов Django по номеру недели ISO

У меня есть модель, которая содержит datefield. Я пытаюсь получить набор запросов этой модели, содержащий текущую неделю (начинается в понедельник).

Итак, поскольку Django datefieldсодержит простую модель datetime.date, я предположил, что фильтрую с помощью .isocalendar(). По логике это именно то, что я хочу, без лишних сравнений и расчетов по текущему дню недели.

Итак, что я хочу сделать, по сути, это заставить оператор .filterвести себя по следующей логике:

if model.date.isocalendar()[2] == datetime.date.today().isocalendar()[2]
    ...

Но как записать его внутри оператора filter? .filter(model__date__isocalendar=datetime.date.today().isocalendar())даст неверные результаты (такие же, как при сравнении с сегодняшним днем, а не с этой неделей).

При копании верно http://docs.python.org/library/datetime.htmlДругих вариантов дня недели я не заметил...

Примечание из документации:

дата .isocalendar() Возвращает 3-кортеж (год ISO, номер недели ISO, будний день).

Обновление:

Хотя мне не понравилось решение с использованием диапазонов, это лучший вариант. Однако в моем случае я сделал переменную, которая отмечает начало недели и просто выглядит больше или равно значению, потому что, если я ищу совпадения для текущей недели. В случае указания номера недели потребуются оба конца.

today = datetime.date.today()
monday = today - datetime.timedelta(days=today.weekday())

... \
.filter(date__gte=monday)

10
задан JackLeo 9 May 2012 в 15:16
поделиться