У меня есть модель, содержащая datefield
. Я пытаюсь получить набор запросов этой модели, который содержит текущую неделю (начинается в понедельник).
Так как Django datefield
содержит простую модель datetime.date
, которую я решил фильтровать с помощью .isocalendar()
. Логически это именно то, что я хочу без каких-либо дополнительных сравнений и вычислений в текущий день недели.
Итак, что я хочу сделать по существу, это выражение force .filter
, которое должно вести себя в этой логике:
if model.date.isocalendar()[2] == datetime.date.today().isocalendar()[2]
...
Но как написать это внутри оператора фильтра?
.filter(model__date__isocalendar=datetime.date.today().isocalendar())
даст неправильные результаты (то же самое, что и сегодня не на этой неделе).
Как копать true http://docs.python.org/library/datetime.html Я не заметил никаких других вариантов дня недели...
Примечание к документации:
date.isocalendar() Возвращает 3-х кортеж (год ISO, номер недели ISO, ISO день недели).
Update:
Хотя мне не понравилось решение использовать диапазоны, но это лучший вариант. Однако в моем случае я сделал переменную, которая знаменует начало недели и просто выглядит более или равнозначной, потому что если я ищу соответствия для текущей недели. В случае, если вы укажете номер недели, для этого потребуются оба конца.
today = datetime.date.today()
monday = today - datetime.timedelta(days=today.weekday())
... \
.filter(date__gte=monday)