diff -r bb34df2ffc54 -r aa4e58e3a068 django/contrib/admin/views/main.py
--- a/django/contrib/admin/views/main.py	Thu Dec 13 12:30:49 2007 +1030
+++ b/django/contrib/admin/views/main.py	Thu Dec 13 16:31:57 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
diff -r bb34df2ffc54 -r aa4e58e3a068 tests/regressiontests/admin_deleted_objects/models.py
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/regressiontests/admin_deleted_objects/models.py	Thu Dec 13 16:31:57 2007 +1030
@@ -0,0 +1,21 @@
+from django.db import models
+
+class Staff(models.Model):
+    name = models.CharField(max_length=100)
+
+    def __unicode___(self):
+        return self.name
+
+    def __str__(self):
+        return self.name.encode('utf-8')
+
+class Project(models.Model):
+    name = models.CharField(max_length=100)
+    team_leader = models.ForeignKey(Staff, related_name='lead_projects')
+    contact_person = models.ForeignKey(Staff, related_name='contact_projects')
+
+    def __unicode___(self):
+        return self.name
+
+    def __str__(self):
+        return self.name.encode('utf-8')
diff -r bb34df2ffc54 -r aa4e58e3a068 tests/regressiontests/admin_deleted_objects/tests.py
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/regressiontests/admin_deleted_objects/tests.py	Thu Dec 13 16:31:57 2007 +1030
@@ -0,0 +1,28 @@
+try:
+    set
+except NameError:
+    from sets import Set as set     # Python 2.3 fallback
+
+__test__ = {'tests': r"""
+>>> from regressiontests.admin_deleted_objects.models import *
+>>> from django.contrib.admin.views.main import _get_deleted_objects
+>>> from django.contrib.auth.models import AnonymousUser
+
+>>> def print_deleted_objects(obj):
+...     deleted_objects = []
+...     user = AnonymousUser()
+...     perms_needed = set()
+...     _get_deleted_objects(deleted_objects, perms_needed, user, obj, obj.__class__._meta, 0)
+...     print deleted_objects
+
+>>> adam = Staff.objects.create(name=u'Adam')
+>>> sue = Staff.objects.create(name=u'Sue')
+>>> project = Project.objects.create(name=u'World Domination', team_leader=adam, contact_person=sue)
+
+>>> print_deleted_objects(adam)
+[[u'Project: World Domination', []]]
+
+>>> print_deleted_objects(sue)
+[[u'Project: World Domination', []]]
+
+"""}
