I have a model that contains datefield
. I'm trying to get query set of that model that contains current week (starts on Monday).
So since Django datefield
contains simple datetime.date
model I assumed to filter by using .isocalendar()
. Logically it's exactly what I want without no extra comparisons and calculations by current week day.
So what I want to do essentially is force .filter
statement to behave in this logic:
if model.date.isocalendar()[2] == datetime.date.today().isocalendar()[2]
...
Yet how to write it inside filter statement?
.filter(model__date__isocalendar=datetime.date.today().isocalendar())
will give wrong results (same as comparing to today not this week).
As digging true http://docs.python.org/library/datetime.html I have not noticed any other week day options...
Note from documentation:
date.isocalendar() Return a 3-tuple, (ISO year, ISO week number, ISO weekday).
Update:
Although I disliked the solution of using ranges yet it's the best option. However in my case I made a variable that marks the beginning of the week and just look greater or equal value because if I'm looking for a matches for current week. In case of giving the number of the week It would require both ends.
today = datetime.date.today()
monday = today - datetime.timedelta(days=today.weekday())
... \
.filter(date__gte=monday)