summaryrefslogtreecommitdiff
path: root/django
diff options
context:
space:
mode:
authorTim Graham <timograham@gmail.com>2017-12-01 14:00:00 -0500
committerTim Graham <timograham@gmail.com>2017-12-01 22:14:32 -0500
commit81057645f61fe545f4f11737dbd3040043ed2436 (patch)
tree3ab66278054967fc51614e063732be2ff30c12c8 /django
parent095c1aaa898bed40568009db836aa8434f1b983d (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.py4
-rw-r--r--django/contrib/admin/static/admin/js/autocomplete.js9
-rw-r--r--django/contrib/admin/widgets.py7
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):
"""