Index: django/contrib/admin/views/main.py
===================================================================
--- django/contrib/admin/views/main.py	(revision 9014)
+++ django/contrib/admin/views/main.py	(working copy)
@@ -155,9 +155,14 @@
                     f = lookup_opts.get_field(field_name)
                 except models.FieldDoesNotExist:
                     # See whether field_name is a name of a non-field
-                    # that allows sorting.
+                    # that allows sorting.  field_name can either be
+                    # a callable function or a attribute name on the
+                    # model.
                     try:
-                        attr = getattr(self.model, field_name)
+                        if callable(field_name):
+                            attr = field_name
+                        else:
+                            attr = getattr(self.model, field_name)
                         order_field = attr.admin_order_field
                     except AttributeError:
                         pass
