Skip to content

Commit

Permalink
Fixed #21186: Fixed regression when using date fields in the admin's …
Browse files Browse the repository at this point in the history
…list_filter.

Thanks to onlygoldi2201 for the report and to ramiro and apollo13
for the reviews.
  • Loading branch information
bmispelon committed Sep 27, 2013
1 parent 8a4f5de commit 8f51ba6
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 6 deletions.
9 changes: 7 additions & 2 deletions django/contrib/admin/filters.py
Expand Up @@ -303,6 +303,11 @@ def __init__(self, field, request, params, model, model_admin, field_path):
else: # field is a models.DateField else: # field is a models.DateField
today = now.date() today = now.date()
tomorrow = today + datetime.timedelta(days=1) 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_since = '%s__gte' % field_path
self.lookup_kwarg_until = '%s__lt' % field_path self.lookup_kwarg_until = '%s__lt' % field_path
Expand All @@ -318,11 +323,11 @@ def __init__(self, field, request, params, model, model_admin, field_path):
}), }),
(_('This month'), { (_('This month'), {
self.lookup_kwarg_since: str(today.replace(day=1)), self.lookup_kwarg_since: str(today.replace(day=1)),
self.lookup_kwarg_until: str(tomorrow), self.lookup_kwarg_until: str(next_month),
}), }),
(_('This year'), { (_('This year'), {
self.lookup_kwarg_since: str(today.replace(month=1, day=1)), 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__( super(DateFieldListFilter, self).__init__(
Expand Down
13 changes: 9 additions & 4 deletions tests/admin_filters/tests.py
Expand Up @@ -143,6 +143,11 @@ def setUp(self):
self.today = datetime.date.today() self.today = datetime.date.today()
self.tomorrow = self.today + datetime.timedelta(days=1) self.tomorrow = self.today + datetime.timedelta(days=1)
self.one_week_ago = self.today - datetime.timedelta(days=7) 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() self.request_factory = RequestFactory()


Expand Down Expand Up @@ -196,7 +201,7 @@ def test_datefieldlistfilter(self):
% (self.today, self.tomorrow)) % (self.today, self.tomorrow))


request = self.request_factory.get('/', {'date_registered__gte': self.today.replace(day=1), 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) changelist = self.get_changelist(request, Book, modeladmin)


# Make sure the correct queryset is returned # Make sure the correct queryset is returned
Expand All @@ -214,10 +219,10 @@ def test_datefieldlistfilter(self):
self.assertEqual(choice['selected'], True) self.assertEqual(choice['selected'], True)
self.assertEqual(choice['query_string'], '?date_registered__gte=%s' self.assertEqual(choice['query_string'], '?date_registered__gte=%s'
'&date_registered__lt=%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), 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) changelist = self.get_changelist(request, Book, modeladmin)


# Make sure the correct queryset is returned # Make sure the correct queryset is returned
Expand All @@ -235,7 +240,7 @@ def test_datefieldlistfilter(self):
self.assertEqual(choice['selected'], True) self.assertEqual(choice['selected'], True)
self.assertEqual(choice['query_string'], '?date_registered__gte=%s' self.assertEqual(choice['query_string'], '?date_registered__gte=%s'
'&date_registered__lt=%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), request = self.request_factory.get('/', {'date_registered__gte': str(self.one_week_ago),
'date_registered__lt': str(self.tomorrow)}) 'date_registered__lt': str(self.tomorrow)})
Expand Down

0 comments on commit 8f51ba6

Please sign in to comment.