diff options
| author | Tim Graham <timograham@gmail.com> | 2017-12-01 14:00:00 -0500 |
|---|---|---|
| committer | Tim Graham <timograham@gmail.com> | 2017-12-01 22:14:32 -0500 |
| commit | 81057645f61fe545f4f11737dbd3040043ed2436 (patch) | |
| tree | 3ab66278054967fc51614e063732be2ff30c12c8 /django | |
| parent | 095c1aaa898bed40568009db836aa8434f1b983d (diff) | |
Fixed #28871 -- Fixed initialization of autocomplete widgets in "Add another" inlines.
Also allowed autocomplete widgets to work on AdminSites with a name other
than 'admin'.
Diffstat (limited to 'django')
| -rw-r--r-- | django/contrib/admin/options.py | 4 | ||||
| -rw-r--r-- | django/contrib/admin/static/admin/js/autocomplete.js | 9 | ||||
| -rw-r--r-- | django/contrib/admin/widgets.py | 7 |
3 files changed, 10 insertions, 10 deletions
diff --git a/django/contrib/admin/options.py b/django/contrib/admin/options.py index 627c76be6a..a5374527fc 100644 --- a/django/contrib/admin/options.py +++ b/django/contrib/admin/options.py @@ -220,7 +220,7 @@ class BaseModelAdmin(metaclass=forms.MediaDefiningClass): db = kwargs.get('using') if db_field.name in self.get_autocomplete_fields(request): - kwargs['widget'] = AutocompleteSelect(db_field.remote_field, using=db) + kwargs['widget'] = AutocompleteSelect(db_field.remote_field, self.admin_site, using=db) elif db_field.name in self.raw_id_fields: kwargs['widget'] = widgets.ForeignKeyRawIdWidget(db_field.remote_field, self.admin_site, using=db) elif db_field.name in self.radio_fields: @@ -248,7 +248,7 @@ class BaseModelAdmin(metaclass=forms.MediaDefiningClass): autocomplete_fields = self.get_autocomplete_fields(request) if db_field.name in autocomplete_fields: - kwargs['widget'] = AutocompleteSelectMultiple(db_field.remote_field, using=db) + kwargs['widget'] = AutocompleteSelectMultiple(db_field.remote_field, self.admin_site, using=db) elif db_field.name in self.raw_id_fields: kwargs['widget'] = widgets.ManyToManyRawIdWidget(db_field.remote_field, self.admin_site, using=db) elif db_field.name in list(self.filter_vertical) + list(self.filter_horizontal): diff --git a/django/contrib/admin/static/admin/js/autocomplete.js b/django/contrib/admin/static/admin/js/autocomplete.js index 15321f974d..65c0702dd9 100644 --- a/django/contrib/admin/static/admin/js/autocomplete.js +++ b/django/contrib/admin/static/admin/js/autocomplete.js @@ -24,15 +24,14 @@ }; $(function() { - $('.admin-autocomplete').djangoAdminSelect2(); + // Initialize all autocomplete widgets except the one in the template + // form used when a new formset is added. + $('.admin-autocomplete').not('[name*=__prefix__]').djangoAdminSelect2(); }); $(document).on('formset:added', (function() { return function(event, $newFormset) { - var $widget = $newFormset.find('.admin-autocomplete'); - // Exclude already initialized Select2 inputs. - $widget = $widget.not('.select2-hidden-accessible'); - return init($widget); + return $newFormset.find('.admin-autocomplete').djangoAdminSelect2(); }; })(this)); }(django.jQuery)); diff --git a/django/contrib/admin/widgets.py b/django/contrib/admin/widgets.py index dfb288642e..c8ead0e0ae 100644 --- a/django/contrib/admin/widgets.py +++ b/django/contrib/admin/widgets.py @@ -400,10 +400,11 @@ class AutocompleteMixin: Renders the necessary data attributes for select2 and adds the static form media. """ - url_name = 'admin:%s_%s_autocomplete' + url_name = '%s:%s_%s_autocomplete' - def __init__(self, rel, attrs=None, choices=(), using=None): + def __init__(self, rel, admin_site, attrs=None, choices=(), using=None): self.rel = rel + self.admin_site = admin_site self.db = using self.choices = choices if attrs is not None: @@ -413,7 +414,7 @@ class AutocompleteMixin: def get_url(self): model = self.rel.model - return reverse(self.url_name % (model._meta.app_label, model._meta.model_name)) + return reverse(self.url_name % (self.admin_site.name, model._meta.app_label, model._meta.model_name)) def build_attrs(self, base_attrs, extra_attrs=None): """ |
