Index: django/contrib/admin/templatetags/admin_list.py
===================================================================
--- django/contrib/admin/templatetags/admin_list.py	(revision 7810)
+++ django/contrib/admin/templatetags/admin_list.py	(working copy)
@@ -99,11 +99,7 @@
             # So this _is_ a sortable non-field.  Go to the yield
             # after the else clause.
         else:
-            if isinstance(f.rel, models.ManyToOneRel) and f.null:
-                yield {"text": f.verbose_name}
-                continue
-            else:
-                header = f.verbose_name
+            header = f.verbose_name
 
         th_classes = []
         new_order_type = 'asc'
Index: django/contrib/admin/views/main.py
===================================================================
--- django/contrib/admin/views/main.py	(revision 7810)
+++ django/contrib/admin/views/main.py	(working copy)
@@ -175,8 +175,7 @@
                     except AttributeError:
                         pass
                 else:
-                    if not isinstance(f.rel, models.ManyToOneRel) or not f.null:
-                        order_field = f.name
+                    order_field = f.name
             except (IndexError, ValueError):
                 pass # Invalid ordering specified. Just use the default.
         if ORDER_TYPE_VAR in params and params[ORDER_TYPE_VAR] in ('asc', 'desc'):
