Commit 8f51ba66 authored by Baptiste Mispelon's avatar Baptiste Mispelon
Browse files

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.
parent 8a4f5de4
Loading
Loading
Loading
Loading
+7 −2
Original line number Diff line number Diff line
@@ -303,6 +303,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
@@ -318,11 +323,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__(
+9 −4
Original line number Diff line number Diff line
@@ -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)})