diff --git a/django/contrib/admin/options.py b/django/contrib/admin/options.py
index c603210..206399b 100644
--- a/django/contrib/admin/options.py
+++ b/django/contrib/admin/options.py
@@ -70,6 +70,7 @@ class BaseModelAdmin(object):
     formfield_overrides = {}
     readonly_fields = ()
     ordering = None
+    exclude_add = []
 
     def __init__(self):
         overrides = FORMFIELD_FOR_DBFIELD_DEFAULTS.copy()
@@ -113,7 +114,8 @@ class BaseModelAdmin(object):
                 related_modeladmin = self.admin_site._registry.get(
                                                             db_field.rel.to)
                 can_add_related = bool(related_modeladmin and
-                            related_modeladmin.has_add_permission(request))
+                            related_modeladmin.has_add_permission(request) and
+                            db_field.name not in self.exclude_add)
                 formfield.widget = widgets.RelatedFieldWidgetWrapper(
                             formfield.widget, db_field.rel, self.admin_site,
                             can_add_related=can_add_related)
diff --git a/docs/ref/contrib/admin/index.txt b/docs/ref/contrib/admin/index.txt
index fb48ba8..e0f1c25 100644
--- a/docs/ref/contrib/admin/index.txt
+++ b/docs/ref/contrib/admin/index.txt
@@ -267,6 +267,18 @@ subclass::
             ``django.utils.html.escape()`` to escape any HTML special
             characters.
 
+.. attribute:: ModelAdmin.exclude_add
+
+    Disable the related field "add another" popup for any field listed.
+
+    For example::
+
+    class BookAdmin(admin.ModelAdmin):
+        exclude_add = ['author']
+
+    In the admin form for the Book model, the author field will appear without
+    the popup link next to it.
+
 .. attribute:: ModelAdmin.filter_horizontal
 
     By default, a :class:`~django.db.models.ManyToManyField` is displayed in
diff --git a/tests/regressiontests/admin_views/models.py b/tests/regressiontests/admin_views/models.py
index 854fb60..4c7e8b8 100644
--- a/tests/regressiontests/admin_views/models.py
+++ b/tests/regressiontests/admin_views/models.py
@@ -723,6 +723,9 @@ class Answer(models.Model):
     def __unicode__(self):
         return self.answer
 
+class AnswerAdmin(admin.ModelAdmin):
+    exclude_add = ['question']
+
 class Reservation(models.Model):
     start_date = models.DateTimeField()
     price = models.IntegerField()
@@ -864,5 +867,5 @@ admin.site.register(Pizza, PizzaAdmin)
 admin.site.register(Topping)
 admin.site.register(Album, AlbumAdmin)
 admin.site.register(Question)
-admin.site.register(Answer)
+admin.site.register(Answer, AnswerAdmin)
 admin.site.register(PrePopulatedPost, PrePopulatedPostAdmin)
diff --git a/tests/regressiontests/admin_views/tests.py b/tests/regressiontests/admin_views/tests.py
index 25740bc..33dd6bf 100644
--- a/tests/regressiontests/admin_views/tests.py
+++ b/tests/regressiontests/admin_views/tests.py
@@ -119,6 +119,13 @@ class AdminViewBasicTest(TestCase):
         response = self.client.post('/test_admin/%s/admin_views/section/add/' % self.urlbit, post_data)
         self.assertEqual(response.status_code, 302) # redirect somewhere
 
+    def testExcludeAdd(self):
+        """
+        Test if we can disable "add" popup links in the admin
+        """
+        response = self.client.get(reverse('admin:admin_views_answer_add'))
+        self.assertNotContains(response, """<a href="/test_admin/admin/admin_views/question/add/" class="add-another" id="add_id_question" onclick="return showAddAnotherPopup(this);"> <img src="/static/admin/img/admin/icon_addlink.gif" width="10" height="10" alt="Add Another"/></a>""")
+
     def testPopupAddPost(self):
         """
         Ensure http response from a popup is properly escaped.
