Index: django/contrib/admin/filterspecs.py
===================================================================
--- django\contrib\admin\filterspecs.py	Tue Dec 28 21:37:31 2010
+++ django\contrib\admin\filterspecs.orig	Tue Dec 28 19:40:28 2010
@@ -76,9 +76,7 @@
             self.lookup_title = f.verbose_name # use field name
         rel_name = other_model._meta.pk.name
         self.lookup_kwarg = '%s__%s__exact' % (self.field_path, rel_name)
-        self.lookup_null_kwarg = '%s__isnull' % (self.field_path) #f.name
         self.lookup_val = request.GET.get(self.lookup_kwarg, None)
-        self.lookup_null = request.GET.get(self.lookup_null_kwarg, None)
         self.lookup_choices = f.get_choices(include_blank=False)
         
     def has_output(self):
@@ -88,17 +86,13 @@
         return self.lookup_title
 
     def choices(self, cl):
-        yield {'selected': self.lookup_val is None and not self.lookup_null,
-               'query_string': cl.get_query_string({}, [self.lookup_kwarg, self.lookup_null_kwarg]),
+        yield {'selected': self.lookup_val is None,
+               'query_string': cl.get_query_string({}, [self.lookup_kwarg]),
                'display': _('All')}
         for pk_val, val in self.lookup_choices:
             yield {'selected': self.lookup_val == smart_unicode(pk_val),
-                   'query_string': cl.get_query_string({self.lookup_kwarg: pk_val}, [self.lookup_null_kwarg]),
+                   'query_string': cl.get_query_string({self.lookup_kwarg: pk_val}),
                    'display': val}
-        if self.field.null:
-            yield {'selected': self.lookup_null,
-                   'query_string': cl.get_query_string({self.lookup_null_kwarg: 'True'}, [self.lookup_kwarg]),
-                   'display': '(%s)' % _("None")}
 
 FilterSpec.register(lambda f: (
         hasattr(f, 'rel') and bool(f.rel) or
@@ -198,11 +192,8 @@
         super(AllValuesFilterSpec, self).__init__(f, request, params, model,
                                                   model_admin,
                                                   field_path=field_path)
-        self.lookup_kwarg = self.field_path
-        self.lookup_kwarg_isnull = '%s__isnull' % self.field_path
-        self.lookup_val = request.GET.get(self.lookup_kwarg, None)
-        self.lookup_val_isnull = request.GET.get(self.lookup_kwarg_isnull, None)
-        parent_model, reverse_path = reverse_field_path(model, self.field_path)
+        self.lookup_val = request.GET.get(self.field_path, None)
+        parent_model, reverse_path = reverse_field_path(model, field_path)
         queryset = parent_model._default_manager.all()
         # optional feature: limit choices base on existing relationships
         # queryset = queryset.complex_filter(
@@ -211,29 +202,18 @@
         queryset = queryset.filter(limit_choices_to)
         
         self.lookup_choices = \
-            queryset.distinct().order_by(f.name).values_list(f.name, flat=True)
+            queryset.distinct().order_by(f.name).values(f.name)
 
     def title(self):
         return self.field.verbose_name
 
     def choices(self, cl):
-        yield {'selected': self.lookup_val is None and self.lookup_val_isnull is None,
-               'query_string': cl.get_query_string({}, [self.lookup_kwarg, self.lookup_kwarg_isnull]),
+        yield {'selected': self.lookup_val is None,
+               'query_string': cl.get_query_string({}, [self.field_path]),
                'display': _('All')}
-        include_none = False
-        
         for val in self.lookup_choices:
-            if val is None:
-                include_none = True
-                continue
-            val = smart_unicode(val)
-            
+            val = smart_unicode(val[self.field.name])
             yield {'selected': self.lookup_val == val,
-                   'query_string': cl.get_query_string({self.lookup_kwarg: val}, [self.lookup_kwarg_isnull]),
+                   'query_string': cl.get_query_string({self.field_path: val}),
                    'display': val}
-        if include_none:
-            yield {'selected': self.lookup_val_isnull is not None,
-                    'query_string': cl.get_query_string({self.lookup_kwarg_isnull: 'True'}, [self.lookup_kwarg]),
-                    'display': _('None')}
-
 FilterSpec.register(lambda f: True, AllValuesFilterSpec)
