diff -r 8127b7a73808 src/django/contrib/admin/views/main.py
--- a/src/django/contrib/admin/views/main.py	Wed Dec 12 10:40:30 2007 +1030
+++ b/src/django/contrib/admin/views/main.py	Wed Dec 12 16:03:28 2007 +1030
@@ -419,10 +419,10 @@ def _get_deleted_objects(deleted_objects
         return # Avoid recursing too deep.
     opts_seen = []
     for related in opts.get_all_related_objects():
-        if related.opts in opts_seen:
+        rel_opts_name = related.get_accessor_name()
+        if rel_opts_name in opts_seen:
             continue
-        opts_seen.append(related.opts)
-        rel_opts_name = related.get_accessor_name()
+        opts_seen.append(rel_opts_name)
         if isinstance(related.field.rel, models.OneToOneRel):
             try:
                 sub_obj = getattr(obj, rel_opts_name)
@@ -467,10 +467,10 @@ def _get_deleted_objects(deleted_objects
                 if not user.has_perm(p):
                     perms_needed.add(related.opts.verbose_name)
     for related in opts.get_all_related_many_to_many_objects():
-        if related.opts in opts_seen:
+        rel_opts_name = related.get_accessor_name()
+        if rel_opts_name in opts_seen:
             continue
-        opts_seen.append(related.opts)
-        rel_opts_name = related.get_accessor_name()
+        opts_seen.append(rel_opts_name)
         has_related_objs = False
 
         # related.get_accessor_name() could return None for symmetrical relationships
