Date-based generic views mix dates and datetimes unsafely
|Reported by:||Aymeric Augustin||Owned by:||Aymeric Augustin|
|Has patch:||yes||Needs documentation:||no|
|Needs tests:||no||Patch needs improvement:||no|
Date-based generic views can use either a DateField or a DateTimeField. But the logic of the lookups to handle these two cases is a bit fuzzy. When time zone support is enabled, it isn't correct (or at least, not obviously so).
In order to make the code less fragile, I rewrote much of the interval handling logic.
- adds some explicit conversions between dates and datetimes, accounting for the current time zone,
- makes the code generally clearer and possibly more correct — off-by-the-UTC-offset bugs are less likely when
USE_TZ = True.
As a side effect, this patch is likely to fix two bugs:
- an egde case where accessing next_day/week/month/year on a DateTimeField could 404 even with allow_empty = False due to approximative filtering,