From ae43d11838c783797805774a76cd15ff6ea565ba Mon Sep 17 00:00:00 2001 From: Karen Tracey Date: Tue, 21 Oct 2008 19:03:21 +0000 Subject: Fixed #3096 -- Make admin list_filters respect limit_choices_to. git-svn-id: http://code.djangoproject.com/svn/django/trunk@9241 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- .../admin_views/fixtures/admin-views-colors.xml | 19 +++++++++++++++++++ tests/regressiontests/admin_views/models.py | 17 +++++++++++++++++ tests/regressiontests/admin_views/tests.py | 15 ++++++++++++++- 3 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 tests/regressiontests/admin_views/fixtures/admin-views-colors.xml (limited to 'tests') diff --git a/tests/regressiontests/admin_views/fixtures/admin-views-colors.xml b/tests/regressiontests/admin_views/fixtures/admin-views-colors.xml new file mode 100644 index 0000000000..e1213561b9 --- /dev/null +++ b/tests/regressiontests/admin_views/fixtures/admin-views-colors.xml @@ -0,0 +1,19 @@ + + + + Red + 1 + + + Orange + 1 + + + Blue + 0 + + + Green + 0 + + diff --git a/tests/regressiontests/admin_views/models.py b/tests/regressiontests/admin_views/models.py index 52e75699ea..d381edadd0 100644 --- a/tests/regressiontests/admin_views/models.py +++ b/tests/regressiontests/admin_views/models.py @@ -74,7 +74,24 @@ class ModelWithStringPrimaryKey(models.Model): def __unicode__(self): return self.id +class Color(models.Model): + value = models.CharField(max_length=10) + warm = models.BooleanField() + def __unicode__(self): + return self.value + +class Thing(models.Model): + title = models.CharField(max_length=20) + color = models.ForeignKey(Color, limit_choices_to={'warm': True}) + def __unicode__(self): + return self.title + +class ThingAdmin(admin.ModelAdmin): + list_filter = ('color',) + admin.site.register(Article, ArticleAdmin) admin.site.register(CustomArticle, CustomArticleAdmin) admin.site.register(Section, inlines=[ArticleInline]) admin.site.register(ModelWithStringPrimaryKey) +admin.site.register(Color) +admin.site.register(Thing, ThingAdmin) diff --git a/tests/regressiontests/admin_views/tests.py b/tests/regressiontests/admin_views/tests.py index f331c12591..bc9d1d49ae 100644 --- a/tests/regressiontests/admin_views/tests.py +++ b/tests/regressiontests/admin_views/tests.py @@ -12,7 +12,7 @@ from django.utils.html import escape from models import Article, CustomArticle, Section, ModelWithStringPrimaryKey class AdminViewBasicTest(TestCase): - fixtures = ['admin-views-users.xml'] + fixtures = ['admin-views-users.xml', 'admin-views-colors.xml'] def setUp(self): self.client.login(username='super', password='secret') @@ -147,6 +147,19 @@ class AdminViewBasicTest(TestCase): response.content.index('Middle content') < response.content.index('Newest content'), "Results of sorting on ModelAdmin method are out of order." ) + + def testLimitedFilter(self): + """Ensure admin changelist filters do not contain objects excluded via limit_choices_to.""" + response = self.client.get('/test_admin/admin/admin_views/thing/') + self.failUnlessEqual(response.status_code, 200) + self.failUnless( + '
' in response.content, + "Expected filter not found in changelist view." + ) + self.failIf( + 'Blue' in response.content, + "Changelist filter not correctly limited by limit_choices_to." + ) def get_perm(Model, perm): """Return the permission object, for the Model""" -- cgit v1.3