﻿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
30026	Using collapse class in ModelAdmin fieldset while using the same media file in ModelAdmin's and its inline's form causes wrong media ordering	Krzysztof Socha	nobody	"Affects Django 2.0 and 2.1. Does not affect master (or at least I couldn't reproduce the problem given steps below, as its collapse.js no longer depends on jQuery).

Steps to reproduce:
- Create a model admin with an inline
- Use the same media file in model admin and inline field (to simplify, use the same widget)
- Set {{{collapse}}} class on a model admin fieldset

Code snippets:

{{{
# models.py
from django.db import models


class Parent(models.Model):
    text = models.CharField(max_length=100)


class Child(models.Model):
    parent = models.ForeignKey(Parent, on_delete=models.CASCADE)
    text = models.CharField(max_length=100)
}}}

{{{
# admin.py
from django import forms
from django.contrib import admin
from django.db import models

from .models import Child, Parent


class TestWidget(forms.TextInput):
    class Media:
        js = (""foo.js"",)


class ChildInline(admin.StackedInline):
    model = Child
    formfield_overrides = {models.CharField: {""widget"": TestWidget}}


@admin.register(Parent)
class ParentAdmin(admin.ModelAdmin):
    inlines = [ChildInline]
    fieldsets = (
        (""Fieldset"", {
            ""classes"": (""collapse"",),
            ""fields"": (""text"",)
        }),
    )
    formfield_overrides = {models.CharField: {""widget"": TestWidget}}
}}}

Expected result:
- Following order of JS files:
{{{
<script type=""text/javascript"" src=""/static/admin/js/vendor/jquery/jquery.js""></script>
<script type=""text/javascript"" src=""/static/admin/js/jquery.init.js""></script>
<script type=""text/javascript"" src=""/static/admin/js/core.js""></script>
<script type=""text/javascript"" src=""/static/admin/js/admin/RelatedObjectLookups.js""></script>
<script type=""text/javascript"" src=""/static/admin/js/actions.js""></script>
<script type=""text/javascript"" src=""/static/admin/js/urlify.js""></script>
<script type=""text/javascript"" src=""/static/admin/js/prepopulate.js""></script>
<script type=""text/javascript"" src=""/static/admin/js/vendor/xregexp/xregexp.js""></script>
<script type=""text/javascript"" src=""/static/admin/js/collapse.js""></script>
<script type=""text/javascript"" src=""/static/admin/js/inlines.js""></script>
<script type=""text/javascript"" src=""/static/foo.js""></script>
}}}
- Change view scripts work correctly (inlines handling specifically)

Actual result:
- A warning is emitted:
{{{
.../django/forms/widgets.py:126: MediaOrderConflictWarning: Detected duplicate Media files in an opposite order:
admin/js/inlines.js
admin/js/jquery.init.js
  MediaOrderConflictWarning,
}}}
- JS error shown in the console:
{{{
inlines.js:20 Uncaught TypeError: Cannot read property 'fn' of undefined
    at inlines.js:20
    at inlines.js:298
}}}
- ""Add new Child"" button doesn't appear
- {{{admin/js/inlines.js}}} is loaded before {{{admin/js/vendor/jquery/jquery.js}}}
- Actual order of JS files:
{{{
<script type=""text/javascript"" src=""/static/admin/js/inlines.js""></script>
<script type=""text/javascript"" src=""/static/foo.js""></script>
<script type=""text/javascript"" src=""/static/admin/js/vendor/jquery/jquery.js""></script>
<script type=""text/javascript"" src=""/static/admin/js/jquery.init.js""></script>
<script type=""text/javascript"" src=""/static/admin/js/core.js""></script>
<script type=""text/javascript"" src=""/static/admin/js/admin/RelatedObjectLookups.js""></script>
<script type=""text/javascript"" src=""/static/admin/js/actions.js""></script>
<script type=""text/javascript"" src=""/static/admin/js/urlify.js""></script>
<script type=""text/javascript"" src=""/static/admin/js/prepopulate.js""></script>
<script type=""text/javascript"" src=""/static/admin/js/vendor/xregexp/xregexp.js""></script>
<script type=""text/javascript"" src=""/static/admin/js/collapse.js""></script>
}}}

Additional notes:

The issue only occurs if `Fieldset.media` includes files that aren't in `InlineModelAdmin.media` (which is only the case if modeladmin has a collapsed fieldset and inline isn't collapsed).

"	Bug	closed	contrib.admin	2.1	Normal	needsinfo			Unreviewed	0	0	0	0	0	0
