#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.