From c2a35d40db3eca728ac809a3ddb5e8fcec463bca Mon Sep 17 00:00:00 2001 From: Baptiste Mispelon Date: Sat, 28 Sep 2013 00:40:43 +0200 Subject: [PATCH] [1.6.x] Fixed #21186: Fixed regression when using date fields in the admin's list_filter. Thanks to onlygoldi2201 for the report and to ramiro and apollo13 for the reviews. Backport of 8f51ba669aba94eea684ea3f3429fd8e39e70679 from master. --- django/contrib/admin/filters.py | 9 +++++++-- tests/admin_filters/tests.py | 13 +++++++++---- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/django/contrib/admin/filters.py b/django/contrib/admin/filters.py index 4131494515..2515bab458 100644 --- a/django/contrib/admin/filters.py +++ b/django/contrib/admin/filters.py @@ -301,6 +301,11 @@ class DateFieldListFilter(FieldListFilter): else: # field is a models.DateField today = now.date() tomorrow = today + datetime.timedelta(days=1) + if today.month == 12: + next_month = today.replace(year=today.year + 1, month=1, day=1) + else: + next_month = today.replace(month=today.month + 1, day=1) + next_year = today.replace(year=today.year + 1, month=1, day=1) self.lookup_kwarg_since = '%s__gte' % field_path self.lookup_kwarg_until = '%s__lt' % field_path @@ -316,11 +321,11 @@ class DateFieldListFilter(FieldListFilter): }), (_('This month'), { self.lookup_kwarg_since: str(today.replace(day=1)), - self.lookup_kwarg_until: str(tomorrow), + self.lookup_kwarg_until: str(next_month), }), (_('This year'), { self.lookup_kwarg_since: str(today.replace(month=1, day=1)), - self.lookup_kwarg_until: str(tomorrow), + self.lookup_kwarg_until: str(next_year), }), ) super(DateFieldListFilter, self).__init__( diff --git a/tests/admin_filters/tests.py b/tests/admin_filters/tests.py index f05e8e2011..364f83e2fa 100644 --- a/tests/admin_filters/tests.py +++ b/tests/admin_filters/tests.py @@ -143,6 +143,11 @@ class ListFiltersTests(TestCase): self.today = datetime.date.today() self.tomorrow = self.today + datetime.timedelta(days=1) self.one_week_ago = self.today - datetime.timedelta(days=7) + if self.today.month == 12: + self.next_month = self.today.replace(year=self.today.year + 1, month=1, day=1) + else: + self.next_month = self.today.replace(month=self.today.month + 1, day=1) + self.next_year = self.today.replace(year=self.today.year + 1, month=1, day=1) self.request_factory = RequestFactory() @@ -196,7 +201,7 @@ class ListFiltersTests(TestCase): % (self.today, self.tomorrow)) request = self.request_factory.get('/', {'date_registered__gte': self.today.replace(day=1), - 'date_registered__lt': self.tomorrow}) + 'date_registered__lt': self.next_month}) changelist = self.get_changelist(request, Book, modeladmin) # Make sure the correct queryset is returned @@ -214,10 +219,10 @@ class ListFiltersTests(TestCase): self.assertEqual(choice['selected'], True) self.assertEqual(choice['query_string'], '?date_registered__gte=%s' '&date_registered__lt=%s' - % (self.today.replace(day=1), self.tomorrow)) + % (self.today.replace(day=1), self.next_month)) request = self.request_factory.get('/', {'date_registered__gte': self.today.replace(month=1, day=1), - 'date_registered__lt': self.tomorrow}) + 'date_registered__lt': self.next_year}) changelist = self.get_changelist(request, Book, modeladmin) # Make sure the correct queryset is returned @@ -235,7 +240,7 @@ class ListFiltersTests(TestCase): self.assertEqual(choice['selected'], True) self.assertEqual(choice['query_string'], '?date_registered__gte=%s' '&date_registered__lt=%s' - % (self.today.replace(month=1, day=1), self.tomorrow)) + % (self.today.replace(month=1, day=1), self.next_year)) request = self.request_factory.get('/', {'date_registered__gte': str(self.one_week_ago), 'date_registered__lt': str(self.tomorrow)})