diff --git a/django/contrib/admin/options.py b/django/contrib/admin/options.py
index 8cc27c5..7cb1aac 100644
--- a/django/contrib/admin/options.py
+++ b/django/contrib/admin/options.py
@@ -791,7 +791,7 @@ class ModelAdmin(BaseModelAdmin):
         opts = model._meta
 
         try:
-            obj = model._default_manager.get(pk=unquote(object_id))
+            obj = self.queryset(request).get(pk=unquote(object_id))
         except model.DoesNotExist:
             # Don't raise Http404 just yet, because we haven't checked
             # permissions yet. We don't want an unauthenticated user to be able
@@ -976,7 +976,7 @@ class ModelAdmin(BaseModelAdmin):
         app_label = opts.app_label
 
         try:
-            obj = self.model._default_manager.get(pk=unquote(object_id))
+            obj = self.queryset(request).get(pk=unquote(object_id))
         except self.model.DoesNotExist:
             # Don't raise Http404 just yet, because we haven't checked
             # permissions yet. We don't want an unauthenticated user to be able
diff --git a/tests/regressiontests/admin_views/models.py b/tests/regressiontests/admin_views/models.py
index 8fc3d38..e2d087d 100644
--- a/tests/regressiontests/admin_views/models.py
+++ b/tests/regressiontests/admin_views/models.py
@@ -262,6 +262,14 @@ class ParentAdmin(admin.ModelAdmin):
     model = Parent
     inlines = [ChildInline]
 
+class EmptyModel(models.Model):
+    def __unicode__(self):
+        return "Primary key = %s" % self.id
+
+class EmptyModelAdmin(admin.ModelAdmin):
+    def queryset(self, request):
+        return super(EmptyModelAdmin, self).queryset(request).filter(pk__gt=1)
+
 admin.site.register(Article, ArticleAdmin)
 admin.site.register(CustomArticle, CustomArticleAdmin)
 admin.site.register(Section, inlines=[ArticleInline])
@@ -274,6 +282,7 @@ admin.site.register(Subscriber, SubscriberAdmin)
 admin.site.register(ExternalSubscriber, ExternalSubscriberAdmin)
 admin.site.register(Podcast, PodcastAdmin)
 admin.site.register(Parent, ParentAdmin)
+admin.site.register(EmptyModel, EmptyModelAdmin)
 
 # We intentionally register Promo and ChapterXtra1 but not Chapter nor ChapterXtra2.
 # That way we cover all four cases:
diff --git a/tests/regressiontests/admin_views/tests.py b/tests/regressiontests/admin_views/tests.py
index bba7f6a..447667e 100644
--- a/tests/regressiontests/admin_views/tests.py
+++ b/tests/regressiontests/admin_views/tests.py
@@ -13,7 +13,7 @@ from django.contrib.admin.helpers import ACTION_CHECKBOX_NAME
 from django.utils.html import escape
 
 # local test models
-from models import Article, CustomArticle, Section, ModelWithStringPrimaryKey, Person, Persona, FooAccount, BarAccount, Subscriber, ExternalSubscriber, Podcast
+from models import Article, CustomArticle, Section, ModelWithStringPrimaryKey, Person, Persona, FooAccount, BarAccount, Subscriber, ExternalSubscriber, Podcast, EmptyModel
 
 try:
     set
@@ -963,3 +963,30 @@ class TestInlineNotEditable(TestCase):
         """
         response = self.client.get('/test_admin/admin/admin_views/parent/add/')
         self.failUnlessEqual(response.status_code, 200)
+
+
+class AdminCustomQuerysetTest(TestCase):
+    fixtures = ['admin-views-users.xml']
+
+    def setUp(self):
+        self.client.login(username='super', password='secret')
+        self.pks = []
+        self.pks.append(EmptyModel.objects.create().id)
+        self.pks.append(EmptyModel.objects.create().id)
+        self.pks.append(EmptyModel.objects.create().id)
+
+    def test_changelist_view(self):
+        response = self.client.get('/test_admin/admin/admin_views/emptymodel/')
+        for i in self.pks:
+            if i > 1:
+                self.assertContains(response, 'Primary key = %s' % i)
+            else:
+                self.assertNotContains(response, 'Primary key = %s' % i)
+
+    def test_change_view(self):
+        for i in self.pks:
+            response = self.client.get('/test_admin/admin/admin_views/emptymodel/%s/' % i)
+            if i > 1:
+                self.assertEqual(response.status_code, 200)
+            else:
+                self.assertEqual(response.status_code, 404)
