diff -r 78e735c39934 django/views/generic/detail.py
--- a/django/views/generic/detail.py	Tue Aug 21 14:43:37 2012 +0200
+++ b/django/views/generic/detail.py	Fri Aug 24 16:28:24 2012 +0200
@@ -139,20 +139,27 @@
             if name:
                 names.insert(0, name)
 
+        def format_name(meta) :
+            return "%s/%s%s.html" % (
+                    meta.app_label,
+                    meta.object_name.lower(),
+                    self.template_name_suffix,
+                )
         # The least-specific option is the default <app>/<model>_detail.html;
         # only use this if the object in question is a model.
         if isinstance(self.object, models.Model):
-            names.append("%s/%s%s.html" % (
-                self.object._meta.app_label,
-                self.object._meta.object_name.lower(),
-                self.template_name_suffix
-            ))
+            names.append(format_name(self.object._meta))
         elif hasattr(self, 'model') and self.model is not None and issubclass(self.model, models.Model):
-            names.append("%s/%s%s.html" % (
-                self.model._meta.app_label,
-                self.model._meta.object_name.lower(),
-                self.template_name_suffix
-            ))
+            names.append(format_name(self.model._meta))
+        elif hasattr(self, 'queryset') and self.queryset is not None and hasattr(self.queryset, 'model') :
+            names.append(format_name(self.queryset.model._meta))
+        # Raise the exception early on because this method is not part of the
+        # traceback generated by the resulting exception in template/loader.py
+        # select_template method. If another way is supported in the future to
+        # specify the object we're operating on, the logic to obtain it's meta
+        # class should be added above this comment.
+        elif not names :
+            raise ImproperlyConfigured("No template name set and unable to generate candidates.")
         return names
 
 
diff -r 78e735c39934 tests/regressiontests/generic_views/edit.py
--- a/tests/regressiontests/generic_views/edit.py	Tue Aug 21 14:43:37 2012 +0200
+++ b/tests/regressiontests/generic_views/edit.py	Fri Aug 24 16:28:24 2012 +0200
@@ -89,6 +89,11 @@
         self.assertRedirects(res, reverse('author_detail', kwargs={'pk': obj.pk}))
         self.assertQuerysetEqual(Author.objects.all(), ['<Author: Randall Munroe>'])
 
+    def test_create_form_using_queryset(self) :
+        res = self.client.get('/edit/authors/create/naive/')
+        self.assertEqual(res.status_code, 200)
+        self.assertTemplateUsed('generic_views/author_form.html')
+
     def test_create_without_redirect(self):
         try:
             res = self.client.post('/edit/authors/create/naive/',
