Index: date_based.py
===================================================================
--- date_based.py	(revision 6710)
+++ date_based.py	(working copy)
@@ -21,6 +21,13 @@
         latest
             Latest N (defaults to 15) objects by date
     """
+    
+    if date_field[0]==("-"):
+        date_field = date_field[1:]
+        ascending=''
+    else:
+        ascending='-'
+    
     if extra_context is None: extra_context = {}
     model = queryset.model
     if not allow_future:
@@ -30,7 +37,7 @@
         raise Http404, "No %s available" % model._meta.verbose_name
 
     if date_list and num_latest:
-        latest = queryset.order_by('-'+date_field)[:num_latest]
+        latest = queryset.order_by(ascending+date_field)[:num_latest]
     else:
         latest = None
 
@@ -69,6 +76,12 @@
     model = queryset.model
     now = datetime.datetime.now()
 
+    if date_field[0]==("-"):
+        date_field = date_field[1:]
+        ascending=''
+    else:
+        ascending='-'
+
     lookup_kwargs = {'%s__year' % date_field: year}
 
     # Only bother to check current date if the year isn't in the past and future objects aren't requested.
@@ -78,7 +91,7 @@
     if not date_list and not allow_empty:
         raise Http404
     if make_object_list:
-        object_list = queryset.filter(**lookup_kwargs)
+        object_list = queryset.filter(**lookup_kwargs).order_by(ascending+date_field)
     else:
         object_list = []
     if not template_name:
@@ -123,6 +136,12 @@
     model = queryset.model
     now = datetime.datetime.now()
 
+    if date_field[0]==("-"):
+        date_field = date_field[1:]
+        ascending=''
+    else:
+        ascending='-'
+
     # Calculate first and last day of month, for use in a date-range lookup.
     first_day = date.replace(day=1)
     if first_day.month == 12:
@@ -134,7 +153,7 @@
     # 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:
         lookup_kwargs['%s__lte' % date_field] = now
-    object_list = queryset.filter(**lookup_kwargs)
+    object_list = queryset.filter(**lookup_kwargs).order_by(ascending+date_field)
     if not object_list and not allow_empty:
         raise Http404
 
@@ -185,6 +204,12 @@
     model = queryset.model
     now = datetime.datetime.now()
 
+    if date_field[0]==("-"):
+        date_field = date_field[1:]
+        ascending=''
+    else:
+        ascending='-'
+
     # Calculate first and last day of week, for use in a date-range lookup.
     first_day = date
     last_day = date + datetime.timedelta(days=7)
@@ -193,7 +218,7 @@
     # 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:
         lookup_kwargs['%s__lte' % date_field] = now
-    object_list = queryset.filter(**lookup_kwargs)
+    object_list = queryset.filter(**lookup_kwargs).order_by(ascending+date_field)
     if not object_list and not allow_empty:
         raise Http404
     if not template_name:
@@ -238,6 +263,12 @@
     model = queryset.model
     now = datetime.datetime.now()
 
+    if date_field[0]==("-"):
+        date_field = date_field[1:]
+        ascending=''
+    else:
+        ascending='-'
+
     if isinstance(model._meta.get_field(date_field), DateTimeField):
         lookup_kwargs = {'%s__range' % date_field: (datetime.datetime.combine(date, datetime.time.min), datetime.datetime.combine(date, datetime.time.max))}
     else:
@@ -246,7 +277,7 @@
     # Only bother to check current date if the date isn't in the past and future objects aren't requested.
     if date >= now.date() and not allow_future:
         lookup_kwargs['%s__lte' % date_field] = now
-    object_list = queryset.filter(**lookup_kwargs)
+    object_list = queryset.filter(**lookup_kwargs).order_by(ascending+date_field)
     if not allow_empty and not object_list:
         raise Http404
 
@@ -308,6 +339,9 @@
     model = queryset.model
     now = datetime.datetime.now()
 
+    if date_field[0]==("-"):
+        date_field = date_field[1:]
+
     if isinstance(model._meta.get_field(date_field), DateTimeField):
         lookup_kwargs = {'%s__range' % date_field: (datetime.datetime.combine(date, datetime.time.min), datetime.datetime.combine(date, datetime.time.max))}
     else:
