Skip to content

Commit 6a25089

Browse files
committed
Use object instance when getting _meta info in admin
Make sure to use the object instance in admin.py in order to get the correct app_label and model_name. This is important when a subclass (e.g. of Newsletter) is used.
1 parent 57ac58d commit 6a25089

File tree

2 files changed

+26
-1
lines changed

2 files changed

+26
-1
lines changed

newsletter/admin.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ def admin_submissions(self, obj):
9090

9191
class NewsletterAdminLinkMixin(object):
9292
def admin_newsletter(self, obj):
93-
opts = Newsletter._meta
93+
opts = obj._meta
9494
newsletter = obj.newsletter
9595
url = reverse('admin:%s_%s_change' % (opts.app_label, opts.model_name),
9696
args=(newsletter.id,), current_app=self.admin_site.name)

tests/test_models.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
from django.test import TestCase
2+
3+
from newsletter.models import Newsletter
4+
5+
6+
class CustomNewsletter(Newsletter):
7+
class Meta:
8+
app_label = 'name_of_my_app'
9+
10+
11+
class ModelTestCase(TestCase):
12+
""" Test case for models. """
13+
14+
def test_newsletter_label_name(self):
15+
""" Test that _meta returns correct app_label and model_name. """
16+
self.assertEqual(Newsletter._meta.app_label, 'newsletter')
17+
self.assertEqual(Newsletter._meta.model_name, 'newsletter')
18+
19+
obj = Newsletter()
20+
self.assertEqual(obj._meta.app_label, 'newsletter')
21+
self.assertEqual(obj._meta.model_name, 'newsletter')
22+
23+
custom_obj = CustomNewsletter()
24+
self.assertEqual(custom_obj._meta.app_label, 'name_of_my_app')
25+
self.assertEqual(custom_obj._meta.model_name, 'customnewsletter')

0 commit comments

Comments
 (0)