Skip to content

Commit 5a6446b

Browse files
committed
[1.1.X] Fixed #12778 - Added media handling abilities to admin inlines. Thanks for the patch, pmclanahan.
Backport from trunk, r12825. git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.1.X@12864 bcc190cf-cafb-0310-a4f2-bffc1f526a37
1 parent 5fab617 commit 5a6446b

File tree

3 files changed

+77
-3
lines changed

3 files changed

+77
-3
lines changed

django/contrib/admin/options.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ class IncorrectLookupParameters(Exception):
4949

5050
class BaseModelAdmin(object):
5151
"""Functionality common to both ModelAdmin and InlineAdmin."""
52+
__metaclass__ = forms.MediaDefiningClass
5253

5354
raw_id_fields = ()
5455
fields = None
@@ -170,7 +171,6 @@ def _declared_fieldsets(self):
170171

171172
class ModelAdmin(BaseModelAdmin):
172173
"Encapsulates all admin options and functionality for a given model."
173-
__metaclass__ = forms.MediaDefiningClass
174174

175175
list_display = ('__str__',)
176176
list_display_links = ()

tests/regressiontests/admin_inlines/models.py

Lines changed: 40 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,46 @@ class InnerInline(admin.StackedInline):
4545
can_delete = False
4646

4747

48-
# Test bug #12561
49-
admin.site.register(Holder, inlines=[InnerInline])
48+
class Holder2(models.Model):
49+
dummy = models.IntegerField()
50+
51+
52+
class Inner2(models.Model):
53+
dummy = models.IntegerField()
54+
holder = models.ForeignKey(Holder2)
55+
56+
class HolderAdmin(admin.ModelAdmin):
57+
58+
class Media:
59+
js = ('my_awesome_admin_scripts.js',)
60+
61+
class InnerInline2(admin.StackedInline):
62+
model = Inner2
63+
64+
class Media:
65+
js = ('my_awesome_inline_scripts.js',)
66+
67+
class Holder3(models.Model):
68+
dummy = models.IntegerField()
69+
70+
71+
class Inner3(models.Model):
72+
dummy = models.IntegerField()
73+
holder = models.ForeignKey(Holder3)
74+
75+
class InnerInline3(admin.StackedInline):
76+
model = Inner3
77+
78+
class Media:
79+
js = ('my_awesome_inline_scripts.js',)
80+
81+
# Test bug #12561 and #12778
82+
# only ModelAdmin media
83+
admin.site.register(Holder, HolderAdmin, inlines=[InnerInline])
84+
# ModelAdmin and Inline media
85+
admin.site.register(Holder2, HolderAdmin, inlines=[InnerInline2])
86+
# only Inline media
87+
admin.site.register(Holder3, inlines=[InnerInline3])
5088

5189
__test__ = {'API_TESTS': """
5290

tests/regressiontests/admin_inlines/tests.py

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
# local test models
44
from models import Holder, Inner, InnerInline
5+
from models import Holder2, Inner2, Holder3, Inner3
56

67
class TestInline(TestCase):
78
fixtures = ['admin-views-users.xml']
@@ -28,3 +29,38 @@ def test_can_delete(self):
2829
actual = inner_formset.can_delete
2930
self.assertEqual(expected, actual, 'can_delete must be equal')
3031

32+
class TestInlineMedia(TestCase):
33+
fixtures = ['admin-views-users.xml']
34+
35+
def setUp(self):
36+
37+
result = self.client.login(username='super', password='secret')
38+
self.failUnlessEqual(result, True)
39+
40+
def tearDown(self):
41+
self.client.logout()
42+
43+
def test_inline_media_only_base(self):
44+
holder = Holder(dummy=13)
45+
holder.save()
46+
Inner(dummy=42, holder=holder).save()
47+
change_url = '/test_admin/admin/admin_inlines/holder/%i/' % holder.id
48+
response = self.client.get(change_url)
49+
self.assertContains(response, 'my_awesome_admin_scripts.js')
50+
51+
def test_inline_media_only_inline(self):
52+
holder = Holder3(dummy=13)
53+
holder.save()
54+
Inner3(dummy=42, holder=holder).save()
55+
change_url = '/test_admin/admin/admin_inlines/holder3/%i/' % holder.id
56+
response = self.client.get(change_url)
57+
self.assertContains(response, 'my_awesome_inline_scripts.js')
58+
59+
def test_all_inline_media(self):
60+
holder = Holder2(dummy=13)
61+
holder.save()
62+
Inner2(dummy=42, holder=holder).save()
63+
change_url = '/test_admin/admin/admin_inlines/holder2/%i/' % holder.id
64+
response = self.client.get(change_url)
65+
self.assertContains(response, 'my_awesome_admin_scripts.js')
66+
self.assertContains(response, 'my_awesome_inline_scripts.js')

0 commit comments

Comments
 (0)