diff -r c2b38236b415 -r 405f480d7443 django/contrib/admin/util.py
--- a/django/contrib/admin/util.py	Thu Dec 06 15:30:37 2007 +1030
+++ b/django/contrib/admin/util.py	Tue Dec 18 16:16:37 2007 +1030
@@ -19,10 +19,10 @@ def get_deleted_objects(deleted_objects,
     opts_seen = []
     for related in opts.get_all_related_objects():
         has_admin = related.__class__ in admin_site._registry
-        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)
@@ -68,10 +68,10 @@ def get_deleted_objects(deleted_objects,
                     perms_needed.add(related.opts.verbose_name)
     for related in opts.get_all_related_many_to_many_objects():
         has_admin = related.__class__ in admin_site._registry
-        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 c2b38236b415 -r 405f480d7443 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	Tue Dec 18 16:16:37 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 c2b38236b415 -r 405f480d7443 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	Tue Dec 18 16:16:37 2007 +1030
@@ -0,0 +1,31 @@
+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.util import get_deleted_objects
+>>> from django.contrib.auth.models import AnonymousUser
+>>> from django.contrib.admin.sites import AdminSite
+
+>>> admin_site = AdminSite()
+
+>>> 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, admin_site)
+...     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', []]]
+
+"""}
