I’m working on a Django app for a client so their staff can more easily submit vacation requests and track their amount used/remaining. Because their time off resets at the end of the calendar year, I needed a good way to filter requests by year. I ended up creating a custom Model manager (with some tips from my friend Ben) that would automatically filter to the current year, yet allow filtering by a given year.
class YearManager(models.Manager):
def year(self, year=None):
year = year or timezone.now().year
return super(YearManager, self).get_queryset().filter(start_date__year=year)
This lets me get the current year’s items with MyModel.objects.year()
or a given year with MyModel.objects.year(year=2021)
.