Index: __init__.py
===================================================================
--- __init__.py	(revision 5320)
+++ __init__.py	(working copy)
@@ -5,28 +5,36 @@
 from django.template import loader
 from django.http import HttpResponse, Http404
 from django.db.models.manager import Manager
+from django.db.models.query import QuerySet
 
 def render_to_response(*args, **kwargs):
     return HttpResponse(loader.render_to_string(*args, **kwargs))
 load_and_render = render_to_response # For backwards compatibility.
 
+def _get_queryset(klass):
+    '''
+    Returns a queryset from a Model, Manager or Queryset. Created to make
+    get_object_or_404 and get_list_or_404 more DRY.
+    '''
+    if isinstance(klass, QuerySet):
+        return klass
+    else:
+        if isinstance(klass, Manager):
+            manager = klass
+        else:
+            manager = klass._default_manager
+        return manager.all()
+
 def get_object_or_404(klass, *args, **kwargs):
-    if isinstance(klass, Manager):
-        manager = klass
-        klass = manager.model
-    else:
-        manager = klass._default_manager
+    queryset = _get_queryset(klass)
     try:
-        return manager.get(*args, **kwargs)
-    except klass.DoesNotExist:
-        raise Http404('No %s matches the given query.' % klass._meta.object_name)
+        return queryset.get(*args, **kwargs)
+    except queryset.model.DoesNotExist:
+        raise Http404('No %s matches the given query.' % queryset.model._meta.object_name)
 
 def get_list_or_404(klass, *args, **kwargs):
-    if isinstance(klass, Manager):
-        manager = klass
-    else:
-        manager = klass._default_manager
-    obj_list = list(manager.filter(*args, **kwargs))
+    queryset = _get_queryset(klass)
+    obj_list = list(queryset.filter(*args, **kwargs))
     if not obj_list:
-        raise Http404('No %s matches the given query.' % manager.model._meta.object_name)
+        raise Http404('No %s matches the given query.' % queryset.model._meta.object_name)
     return obj_list
