Due to a bug in the add_date_select function (db/models/sql/subqueries.py:400) I am only seeing the latest date (when using SQLite).
In [2]: Event.objects.all()
Out[2]: [<Event: fsddf on 2009-01-03>, <Event: Fietsen on 2008-10-12>, <Event: Kaas on 2008-10-11>, <Event: Woei on 2008-06-03>]
In [3]: Event.objects.dates('event_date', 'day')
Out[3]: [datetime.datetime(2008, 6, 3, 0, 0)]
Where the latter produces the following SQL code:
SELECT DISTINCT django_date_trunc("day", "agenda_event"."event_date") FROM "agenda_event" ORDER BY 1 ASC LIMIT 21
Here, the mysterious ORDER BY 1 clause gets SQLite in confusion. It comes straight from:
def add_date_select(self, field, lookup_type, order='ASC'):
<snap>
self.distinct = True
self.order_by = order == 'ASC' and [1] or [-1]
We can see that this is indeed the cause by running:
In [31]: Event.objects.dates('event_date', 'day').order_by('event_date')
Out[31]: [datetime.datetime(2008, 6, 3, 0, 0), datetime.datetime(2008, 10, 11, 0, 0), datetime.datetime(2008, 10, 12, 0, 0), datetime.datetime(2009, 1, 3, 0, 0)]
I propose to change the named line into:
self.order_by = order == 'ASC' and [field.name] or ['-%s' % field.name]
After which the code is working just fine:
In [3]: Event.objects.all().dates('event_date', 'day')
Out[3]: [datetime.datetime(2008, 6, 3, 0, 0), datetime.datetime(2008, 10, 11, 0, 0), datetime.datetime(2008, 10, 12, 0, 0), datetime.datetime(2009, 1, 3, 0, 0)]
FYI: Django version 1.1 pre-alpha, r9231 of trunk