Index: django/contrib/admin/options.py
===================================================================
--- django/contrib/admin/options.py	(revision 5427)
+++ django/contrib/admin/options.py	(working copy)
@@ -114,9 +114,10 @@
     filter_vertical = ()
     filter_horizontal = ()
 
-    def __init__(self, model):
+    def __init__(self, model, site):
         self.model = model
         self.opts = model._meta
+        self.site = site
 
     def __call__(self, request, url):
         # Check that LogEntry, ContentType and the auth context processor are installed.
@@ -238,7 +239,7 @@
                 # Wrap the widget's render() method with a method that adds
                 # extra HTML to the end of the rendered output.
                 formfield = db_field.formfield(**kwargs)
-                formfield.widget.render = widgets.RelatedFieldWidgetWrapper(formfield.widget.render, db_field.rel)
+                formfield.widget.render = widgets.RelatedFieldWidgetWrapper(formfield.widget.render, db_field.rel, self.site)
                 return formfield
 
         # For any other type of field, just call its formfield() method.
Index: django/contrib/admin/widgets.py
===================================================================
--- django/contrib/admin/widgets.py	(revision 5427)
+++ django/contrib/admin/widgets.py	(working copy)
@@ -74,17 +74,18 @@
     This class is a wrapper whose __call__() method mimics the interface of a
     Widget's render() method.
     """
-    def __init__(self, render_func, rel):
-        self.render_func, self.rel = render_func, rel
+    def __init__(self, render_func, rel, site):
+        self.render_func, self.rel, self.site = render_func, rel, site
 
     def __call__(self, name, value, *args, **kwargs):
         from django.conf import settings
         rel_to = self.rel.to
         related_url = '../../../%s/%s/' % (rel_to._meta.app_label, rel_to._meta.object_name.lower())
         output = [self.render_func(name, value, *args, **kwargs)]
-        if rel_to._meta.admin: # If the related object has an admin interface:
+        if rel_to in self.site._registry: # If the related object has an admin interface:
             # TODO: "id_" is hard-coded here. This should instead use the correct
             # API to determine the ID dynamically.
+            output
             output.append(u'<a href="%sadd/" class="add-another" id="add_id_%s" onclick="return showAddAnotherPopup(this);"> ' % \
                 (related_url, name))
             output.append(u'<img src="%simg/admin/icon_addlink.gif" width="10" height="10" alt="Add Another"/></a>' % settings.ADMIN_MEDIA_PREFIX)
Index: django/contrib/admin/sites.py
===================================================================
--- django/contrib/admin/sites.py	(revision 5427)
+++ django/contrib/admin/sites.py	(working copy)
@@ -74,7 +75,7 @@
         for model in model_or_iterable:
             if model in self._registry:
                 raise AlreadyRegistered('The model %s is already registered' % model.__class__.__name__)
-            self._registry[model] = admin_class(model)
+            self._registry[model] = admin_class(model, self)
 
     def unregister(self, model_or_iterable):
         """
