Opened 8 years ago

Closed 8 years ago

Last modified 5 years ago

#7602 closed (fixed)

django.views.generic.date_based.archive_(month|day) includes first day of next (month|day)

Reported by: nullie Owned by: Collin Grady
Component: Generic views Version: master
Severity: Keywords: aug22sprint
Cc: Triage Stage: Accepted
Has patch: yes Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: UI/UX:

Description

archive_month view uses range when searching for entries, but when date_field is of type date (and not datetime), range includes day following specified period

Attachments (1)

7602.patch (10.4 KB) - added by Collin Grady 8 years ago.
added tests, verified failure->success change

Download all attachments as: .zip

Change History (8)

comment:1 Changed 8 years ago by nullie

Has patch: set
Needs documentation: unset
Needs tests: set
Patch needs improvement: unset
Index: django/views/generic/date_based.py
===================================================================
--- django/views/generic/date_based.py	(revision 7825)
+++ django/views/generic/date_based.py	(working copy)
@@ -129,7 +129,10 @@
         last_day = first_day.replace(year=first_day.year + 1, month=1)
     else:
         last_day = first_day.replace(month=first_day.month + 1)
-    lookup_kwargs = {'%s__range' % date_field: (first_day, last_day)}
+    lookup_kwargs = {
+        '%s__gte' % date_field: first_day,
+        '%s__lt' % date_field: last_day
+    }
 
     # Only bother to check current date if the month isn't in the past and future objects are requested.
     if last_day >= now.date() and not allow_future:
@@ -188,7 +191,10 @@
     # Calculate first and last day of week, for use in a date-range lookup.
     first_day = date
     last_day = date + datetime.timedelta(days=7)
-    lookup_kwargs = {'%s__range' % date_field: (first_day, last_day)}
+    lookup_kwargs = {
+        '%s__gte' % date_field: first_day,
+        '%s__lt' % date_field: last_day
+    }
 
     # Only bother to check current date if the week isn't in the past and future objects aren't requested.
     if last_day >= now.date() and not allow_future:

comment:2 Changed 8 years ago by Eric Holscher

milestone: 1.0
Triage Stage: UnreviewedAccepted

comment:3 Changed 8 years ago by Collin Grady

Owner: changed from nobody to Collin Grady

Changed 8 years ago by Collin Grady

Attachment: 7602.patch added

added tests, verified failure->success change

comment:4 Changed 8 years ago by Collin Grady

Keywords: aug22sprint added

comment:5 Changed 8 years ago by Collin Grady

Needs tests: unset

comment:6 Changed 8 years ago by Brian Rosner

Resolution: fixed
Status: newclosed

(In [8476]) Fixed #7602 -- Corrected lookup keyword arguments in archive_month and archive_week to properly range when date_field is from DateField. Thanks nullie for the original patch and Colin Grady for the test coverage.

comment:7 Changed 5 years ago by Jacob

milestone: 1.0

Milestone 1.0 deleted

Note: See TracTickets for help on using tickets.
Back to Top