#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
-------------------------------------------+------------------------
               Reporter:  Krzysztof Socha  |          Owner:  nobody
                   Type:  Bug              |         Status:  new
              Component:  contrib.admin    |        Version:  2.1
               Severity:  Normal           |       Keywords:
           Triage Stage:  Unreviewed       |      Has patch:  0
    Needs documentation:  0                |    Needs tests:  0
Patch needs improvement:  0                |  Easy pickings:  0
                  UI/UX:  0                |
-------------------------------------------+------------------------
 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).

-- 
Ticket URL: <https://code.djangoproject.com/ticket/30026>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/049.bff26b490b7610ea334c6b7abd9611d2%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to