﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
29264	JS loading order in Admin-Change_form changes from model to model	Yaron Harel	nobody	"In _changeform_view [https://github.com/django/django/blob/master/django/contrib/admin/options.py#L1538], the self.media and the adminForm media is being merged and then passed into rendering. 
This line merges two lists of css and js. 
The order of JS is important, and in this case (using Autocomplete-light package), it creates sitations where one change_form would load fine and another not to work fine because the js order changed.

In my project, autocomplete-light package should load before admin (in INSTALLED_APPS), but the MediaWidget merge function [https://github.com/django/django/blob/master/django/forms/widgets.py#L99] switches the order sometimes.
self.media always contains regular admin js and css while adminForm.media contains autocomplete-light js
One example of result (`media = self.media + adminForm.media`)
{{{
self.media._js:
<class 'list'>: ['admin/js/vendor/jquery/jquery.js', 'admin/js/jquery.init.js', 'admin/js/core.js', 'admin/js/admin/RelatedObjectLookups.js', 'admin/js/actions.js', 'admin/js/urlify.js', 'admin/js/prepopulate.js', 'admin/js/vendor/xregexp/xregexp.js']

adminForm.media._js:
<class 'list'>: ['autocomplete_light/jquery.init.js', 'autocomplete_light/autocomplete.init.js', 'autocomplete_light/vendor/select2/dist/js/select2.full.js', 'autocomplete_light/vendor/select2/dist/js/i18n/en.js', 'autocomplete_light/forward.js', 'autocomplete_light/select2.js', 'admin/js/vendor/jquery/jquery.js', 'admin/js/jquery.init.js', 'admin/js/calendar.js', 'admin/js/admin/DateTimeShortcuts.js']

merge result -> media._js:
<class 'list'>: ['autocomplete_light/jquery.init.js', 'autocomplete_light/autocomplete.init.js', 'autocomplete_light/vendor/select2/dist/js/select2.full.js', 'autocomplete_light/vendor/select2/dist/js/i18n/en.js', 'autocomplete_light/forward.js', 'autocomplete_light/select2.js', 'admin/js/vendor/jquery/jquery.js', 'admin/js/jquery.init.js', 'admin/js/core.js', 'admin/js/admin/RelatedObjectLookups.js', 'admin/js/actions.js', 'admin/js/urlify.js', 'admin/js/prepopulate.js', 'admin/js/vendor/xregexp/xregexp.js', 'admin/js/calendar.js', 'admin/js/admin/DateTimeShortcuts.js']
}}}

other change_form page:
{{{
self.media._js:
<class 'list'>: ['admin/js/vendor/jquery/jquery.js', 'admin/js/jquery.init.js', 'admin/js/core.js', 'admin/js/admin/RelatedObjectLookups.js', 'admin/js/actions.js', 'admin/js/urlify.js', 'admin/js/prepopulate.js', 'admin/js/vendor/xregexp/xregexp.js']

adminForm.media._js:
<class 'list'>: ['autocomplete_light/jquery.init.js', 'autocomplete_light/autocomplete.init.js', 'autocomplete_light/vendor/select2/dist/js/select2.full.js', 'autocomplete_light/vendor/select2/dist/js/i18n/en.js', 'autocomplete_light/forward.js', 'autocomplete_light/select2.js']

merge result -> media._js:
<class 'list'>: ['admin/js/vendor/jquery/jquery.js', 'admin/js/jquery.init.js', 'admin/js/core.js', 'admin/js/admin/RelatedObjectLookups.js', 'admin/js/actions.js', 'admin/js/urlify.js', 'admin/js/prepopulate.js', 'admin/js/vendor/xregexp/xregexp.js', 'autocomplete_light/jquery.init.js', 'autocomplete_light/autocomplete.init.js', 'autocomplete_light/vendor/select2/dist/js/select2.full.js', 'autocomplete_light/vendor/select2/dist/js/i18n/en.js', 'autocomplete_light/forward.js', 'autocomplete_light/select2.js']
}}}
"	Bug	closed	Template system	2.0	Normal	needsinfo			Unreviewed	0	0	0	0	0	0
