Index: django/contrib/contenttypes/generic.py
===================================================================
--- django/contrib/contenttypes/generic.py	(revision 6622)
+++ django/contrib/contenttypes/generic.py	(working copy)
@@ -49,7 +49,7 @@
         
     def __get__(self, instance, instance_type=None):
         if instance is None:
-            raise AttributeError, u"%s must be accessed via instance" % self.name
+            return self
 
         try:
             return getattr(instance, self.cache_attr)
Index: tests/modeltests/generic_relations/models.py
===================================================================
--- tests/modeltests/generic_relations/models.py	(revision 6622)
+++ tests/modeltests/generic_relations/models.py	(working copy)
@@ -132,4 +132,12 @@
 >>> [(t.tag, t.content_type, t.object_id) for t in TaggedItem.objects.all()]
 [(u'clearish', <ContentType: mineral>, 1), (u'salty', <ContentType: vegetable>, 2), (u'shiny', <ContentType: animal>, 2)]
 
+# Recovering the GenericForeignKey Instance and field names
+>>> isinstance(TaggedItem.content_object, generic.GenericForeignKey)
+True
+>>> TaggedItem.content_object.ct_field
+'content_type'
+>>> TaggedItem.content_object.fk_field
+'object_id'
+
 """}
