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 %} + + + {% trans + + \ 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