diff --git a/django/contrib/admin/options.py b/django/contrib/admin/options.py
index bc98680130..0b40776e3a 100644
--- a/django/contrib/admin/options.py
+++ b/django/contrib/admin/options.py
@@ -163,6 +163,9 @@ class BaseModelAdmin(object):
if db_field.name in self.raw_id_fields:
kwargs['widget'] = widgets.ManyToManyRawIdWidget(db_field.rel)
kwargs['help_text'] = ''
+ elif db_field.name in self.autocomplete_fields:
+ kwargs['widget'] = widgets.ManyToManySearchInput(db_field.rel,
+ self.autocomplete_fields[db_field.name])
elif db_field.name in (list(self.filter_vertical) + list(self.filter_horizontal)):
kwargs['widget'] = widgets.FilteredSelectMultiple(db_field.verbose_name, (db_field.name in self.filter_vertical))
diff --git a/django/contrib/admin/templates/widget/m2m_searchinput.html b/django/contrib/admin/templates/widget/m2m_searchinput.html
new file mode 100644
index 0000000000..1517a14260
--- /dev/null
+++ b/django/contrib/admin/templates/widget/m2m_searchinput.html
@@ -0,0 +1,36 @@
+{% load i18n %}
+
+
+
+
+
\ No newline at end of file
diff --git a/django/contrib/admin/widgets.py b/django/contrib/admin/widgets.py
index 9be892f339..3cc3fbd0c5 100644
--- a/django/contrib/admin/widgets.py
+++ b/django/contrib/admin/widgets.py
@@ -263,6 +263,81 @@ class ManyToManyRawIdWidget(ForeignKeyRawIdWidget):
return True
return False
+class ManyToManySearchInput(ManyToManyRawIdWidget):
+ """
+ A Widget for displaying M2Ms in an autocomplete search input
+ instead in a