summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorJulien Phalip <jphalip@gmail.com>2011-10-26 12:19:18 +0000
committerJulien Phalip <jphalip@gmail.com>2011-10-26 12:19:18 +0000
commit9796f69533320171bf22d769d6e4ab3f5a45aac1 (patch)
treeda65072a8743d2e0f069b0c047201b0d31b463ed /tests
parenta05c70fae133d2ece1bcf1ce6f152a6a70ab8cf2 (diff)
Fixed #16257 -- Added new `ModelAdmin.get_list_display_links()` method to allow for the dynamic display of links on the admin changelist. Thanks to graveyboat for the suggestion and initial patch.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@17037 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'tests')
-rw-r--r--tests/regressiontests/admin_changelist/admin.py13
-rw-r--r--tests/regressiontests/admin_changelist/models.py1
-rw-r--r--tests/regressiontests/admin_changelist/tests.py55
3 files changed, 56 insertions, 13 deletions
diff --git a/tests/regressiontests/admin_changelist/admin.py b/tests/regressiontests/admin_changelist/admin.py
index 19c2b24028..d1d8e0fd1e 100644
--- a/tests/regressiontests/admin_changelist/admin.py
+++ b/tests/regressiontests/admin_changelist/admin.py
@@ -58,13 +58,20 @@ class ChordsBandAdmin(admin.ModelAdmin):
class DynamicListDisplayChildAdmin(admin.ModelAdmin):
- list_display = ('name', 'parent')
+ list_display = ('parent', 'name', 'age')
def get_list_display(self, request):
- my_list_display = list(self.list_display)
+ my_list_display = super(DynamicListDisplayChildAdmin, self).get_list_display(request)
if request.user.username == 'noparents':
+ my_list_display = list(my_list_display)
my_list_display.remove('parent')
-
return my_list_display
+class DynamicListDisplayLinksChildAdmin(admin.ModelAdmin):
+ list_display = ('parent', 'name', 'age')
+ list_display_links = ['parent', 'name']
+
+ def get_list_display_links(self, request, list_display):
+ return ['age']
+
site.register(Child, DynamicListDisplayChildAdmin)
diff --git a/tests/regressiontests/admin_changelist/models.py b/tests/regressiontests/admin_changelist/models.py
index 363b5dbed5..eed3f68508 100644
--- a/tests/regressiontests/admin_changelist/models.py
+++ b/tests/regressiontests/admin_changelist/models.py
@@ -7,6 +7,7 @@ class Parent(models.Model):
class Child(models.Model):
parent = models.ForeignKey(Parent, editable=False, null=True)
name = models.CharField(max_length=30, blank=True)
+ age = models.IntegerField(null=True, blank=True)
class Genre(models.Model):
name = models.CharField(max_length=20)
diff --git a/tests/regressiontests/admin_changelist/tests.py b/tests/regressiontests/admin_changelist/tests.py
index a081c980df..9292895552 100644
--- a/tests/regressiontests/admin_changelist/tests.py
+++ b/tests/regressiontests/admin_changelist/tests.py
@@ -9,7 +9,8 @@ from django.test import TestCase
from django.test.client import RequestFactory
from .admin import (ChildAdmin, QuartetAdmin, BandAdmin, ChordsBandAdmin,
- GroupAdmin, ParentAdmin, DynamicListDisplayChildAdmin, CustomPaginationAdmin,
+ GroupAdmin, ParentAdmin, DynamicListDisplayChildAdmin,
+ DynamicListDisplayLinksChildAdmin, CustomPaginationAdmin,
FilteredChildAdmin, CustomPaginator, site as custom_site)
from .models import (Child, Parent, Genre, Band, Musician, Group, Quartet,
Membership, ChordsMusician, ChordsBand, Invitation)
@@ -41,7 +42,9 @@ class ChangeListTests(TestCase):
new_child = Child.objects.create(name='name', parent=None)
request = self.factory.get('/child/')
m = ChildAdmin(Child, admin.site)
- cl = ChangeList(request, Child, m.list_display, m.list_display_links,
+ list_display = m.get_list_display(request)
+ list_display_links = m.get_list_display_links(request, list_display)
+ cl = ChangeList(request, Child, list_display, list_display_links,
m.list_filter, m.date_hierarchy, m.search_fields,
m.list_select_related, m.list_per_page, m.list_max_show_all, m.list_editable, m)
cl.formset = None
@@ -61,7 +64,9 @@ class ChangeListTests(TestCase):
new_child = Child.objects.create(name='name', parent=new_parent)
request = self.factory.get('/child/')
m = ChildAdmin(Child, admin.site)
- cl = ChangeList(request, Child, m.list_display, m.list_display_links,
+ list_display = m.get_list_display(request)
+ list_display_links = m.get_list_display_links(request, list_display)
+ cl = ChangeList(request, Child, list_display, list_display_links,
m.list_filter, m.date_hierarchy, m.search_fields,
m.list_select_related, m.list_per_page, m.list_max_show_all, m.list_editable, m)
cl.formset = None
@@ -334,28 +339,31 @@ class ChangeListTests(TestCase):
m = custom_site._registry[Child]
request = _mocked_authenticated_request(user_noparents)
response = m.changelist_view(request)
- # XXX - Calling render here to avoid ContentNotRenderedError to be
- # raised. Ticket #15826 should fix this but it's not yet integrated.
- response.render()
self.assertNotContains(response, 'Parent object')
+ list_display = m.get_list_display(request)
+ list_display_links = m.get_list_display_links(request, list_display)
+ self.assertEqual(list_display, ['name', 'age'])
+ self.assertEqual(list_display_links, ['name'])
+
# Test with user 'parents'
m = DynamicListDisplayChildAdmin(Child, admin.site)
request = _mocked_authenticated_request(user_parents)
response = m.changelist_view(request)
- # XXX - #15826
- response.render()
self.assertContains(response, 'Parent object')
custom_site.unregister(Child)
+ list_display = m.get_list_display(request)
+ list_display_links = m.get_list_display_links(request, list_display)
+ self.assertEqual(list_display, ('parent', 'name', 'age'))
+ self.assertEqual(list_display_links, ['parent'])
+
# Test default implementation
custom_site.register(Child, ChildAdmin)
m = custom_site._registry[Child]
request = _mocked_authenticated_request(user_noparents)
response = m.changelist_view(request)
- # XXX - #15826
- response.render()
self.assertContains(response, 'Parent object')
def test_show_all(self):
@@ -386,3 +394,30 @@ class ChangeListTests(TestCase):
cl.get_results(request)
self.assertEqual(len(cl.result_list), 10)
+ def test_dynamic_list_display_links(self):
+ """
+ Regression tests for #16257: dynamic list_display_links support.
+ """
+ parent = Parent.objects.create(name='parent')
+ for i in range(1, 10):
+ Child.objects.create(id=i, name='child %s' % i, parent=parent, age=i)
+
+ superuser = User.objects.create(
+ username='superuser',
+ is_superuser=True)
+
+ def _mocked_authenticated_request(user):
+ request = self.factory.get('/child/')
+ request.user = user
+ return request
+
+ m = DynamicListDisplayLinksChildAdmin(Child, admin.site)
+ request = _mocked_authenticated_request(superuser)
+ response = m.changelist_view(request)
+ for i in range(1, 10):
+ self.assertContains(response, '<a href="%s/">%s</a>' % (i, i))
+
+ list_display = m.get_list_display(request)
+ list_display_links = m.get_list_display_links(request, list_display)
+ self.assertEqual(list_display, ('parent', 'name', 'age'))
+ self.assertEqual(list_display_links, ['age']) \ No newline at end of file