#14711 closed (fixed)
MonthMixin.get_previous_month incorrect under certain conditions
Reported by: | Mark Sundstrom | Owned by: | nobody |
---|---|---|---|
Component: | Generic views | Version: | dev |
Severity: | Keywords: | ||
Cc: | Triage Stage: | Ready for checkin | |
Has patch: | yes | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
In the class-based generic views, MonthMixin.get_previous_month will give an incorrect result when allow_empty is False and there are no records that exist for the first day of the previous month.
For example, consider the Books model in the generic_views regression test cases, with 3 books with the pubdates:
2010-09-01
2010-10-02
2010-11-03
/dates/books/2010/oct/ should return a context where previous_month is 2010-09-01
and
/dates/books/2010/nov/ should similarly return 2010-10-01
However, in the second case, 2010-09-01 is returned instead. This is because the date that is passed to the helper function, _get_next_prev_month, (i.e., naive_result), is 2010-10-01, and the subsequent database lookup is for a record before to that date. Hence, the existing record dated 2010-10-02, is skipped and the previous month is returned instead.
Changing MonthMixin.get_previous_month to instead pass in the last day of the previous month, instead of the first day, fixes this problem.
Test demonstrating the problem and a patch for django.views.generic.dates.py included. (patch fixes 3 typos also)
Attachments (4)
Change History (8)
by , 14 years ago
Attachment: | dates.diff added |
---|
by , 14 years ago
Attachment: | test_case.py added |
---|
the test case that should go in generic_views/dates.py (I can't get the tests.diff to upload)
comment:1 by , 14 years ago
Triage Stage: | Unreviewed → Accepted |
---|
The "tests.diff" actually got uploaded. It's the Trac that sometimes has trouble displaying patches.
by , 14 years ago
Attachment: | 14711.diff added |
---|
Same test and fix as before, but all combined into one diff
comment:2 by , 14 years ago
Triage Stage: | Accepted → Ready for checkin |
---|
Patch for dates.py