Author: kmtracey
Date: 2008-10-21 14:03:21 -0500 (Tue, 21 Oct 2008)
New Revision: 9241

Added:
   
django/trunk/tests/regressiontests/admin_views/fixtures/admin-views-colors.xml
Modified:
   django/trunk/django/contrib/admin/filterspecs.py
   django/trunk/tests/regressiontests/admin_views/models.py
   django/trunk/tests/regressiontests/admin_views/tests.py
Log:
Fixed #3096 -- Make admin list_filters respect limit_choices_to.


Modified: django/trunk/django/contrib/admin/filterspecs.py
===================================================================
--- django/trunk/django/contrib/admin/filterspecs.py    2008-10-21 14:07:36 UTC 
(rev 9240)
+++ django/trunk/django/contrib/admin/filterspecs.py    2008-10-21 19:03:21 UTC 
(rev 9241)
@@ -60,7 +60,7 @@
             self.lookup_title = f.verbose_name
         self.lookup_kwarg = '%s__%s__exact' % (f.name, f.rel.to._meta.pk.name)
         self.lookup_val = request.GET.get(self.lookup_kwarg, None)
-        self.lookup_choices = f.rel.to._default_manager.all()
+        self.lookup_choices = f.get_choices(include_blank=False)
 
     def has_output(self):
         return len(self.lookup_choices) > 1
@@ -72,8 +72,7 @@
         yield {'selected': self.lookup_val is None,
                'query_string': cl.get_query_string({}, [self.lookup_kwarg]),
                'display': _('All')}
-        for val in self.lookup_choices:
-            pk_val = getattr(val, self.field.rel.to._meta.pk.attname)
+        for pk_val, val in self.lookup_choices:
             yield {'selected': self.lookup_val == smart_unicode(pk_val),
                    'query_string': cl.get_query_string({self.lookup_kwarg: 
pk_val}),
                    'display': val}

Added: 
django/trunk/tests/regressiontests/admin_views/fixtures/admin-views-colors.xml
===================================================================
--- 
django/trunk/tests/regressiontests/admin_views/fixtures/admin-views-colors.xml  
                            (rev 0)
+++ 
django/trunk/tests/regressiontests/admin_views/fixtures/admin-views-colors.xml  
    2008-10-21 19:03:21 UTC (rev 9241)
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<django-objects version="1.0">
+    <object pk="1" model="admin_views.color">
+        <field type="CharField" name="value">Red</field>
+        <field type="BooleanField" name="warm">1</field>
+    </object>
+    <object pk="2" model="admin_views.color">
+        <field type="CharField" name="value">Orange</field>
+        <field type="BooleanField" name="warm">1</field>
+    </object>
+    <object pk="3" model="admin_views.color">
+        <field type="CharField" name="value">Blue</field>
+        <field type="BooleanField" name="warm">0</field>
+    </object>
+    <object pk="4" model="admin_views.color">
+        <field type="CharField" name="value">Green</field>
+        <field type="BooleanField" name="warm">0</field>
+    </object>
+</django-objects>


Property changes on: 
django/trunk/tests/regressiontests/admin_views/fixtures/admin-views-colors.xml
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: django/trunk/tests/regressiontests/admin_views/models.py
===================================================================
--- django/trunk/tests/regressiontests/admin_views/models.py    2008-10-21 
14:07:36 UTC (rev 9240)
+++ django/trunk/tests/regressiontests/admin_views/models.py    2008-10-21 
19:03:21 UTC (rev 9241)
@@ -74,7 +74,24 @@
     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)

Modified: django/trunk/tests/regressiontests/admin_views/tests.py
===================================================================
--- django/trunk/tests/regressiontests/admin_views/tests.py     2008-10-21 
14:07:36 UTC (rev 9240)
+++ django/trunk/tests/regressiontests/admin_views/tests.py     2008-10-21 
19:03:21 UTC (rev 9241)
@@ -12,7 +12,7 @@
 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 @@
             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(
+            '<div id="changelist-filter">' in response.content, 
+            "Expected filter not found in changelist view."
+        )
+        self.failIf(
+            '<a href="?color__id__exact=3">Blue</a>' in response.content,
+            "Changelist filter not correctly limited by limit_choices_to."
+        )
     
 def get_perm(Model, perm):
     """Return the permission object, for the Model"""


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To post to this group, send email to django-updates@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/django-updates?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to