Django

Code

Changeset 9241

Show
Ignore:
Timestamp:
10/21/08 14:03:21 (3 months ago)
Author:
kmtracey
Message:

Fixed #3096 -- Make admin list_filters respect limit_choices_to.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • django/trunk/django/contrib/admin/filterspecs.py

    r7967 r9241  
    6161        self.lookup_kwarg = '%s__%s__exact' % (f.name, f.rel.to._meta.pk.name) 
    6262        self.lookup_val = request.GET.get(self.lookup_kwarg, None) 
    63         self.lookup_choices = f.rel.to._default_manager.all(
     63        self.lookup_choices = f.get_choices(include_blank=False
    6464 
    6565    def has_output(self): 
     
    7373               'query_string': cl.get_query_string({}, [self.lookup_kwarg]), 
    7474               'display': _('All')} 
    75         for val in self.lookup_choices: 
    76             pk_val = getattr(val, self.field.rel.to._meta.pk.attname) 
     75        for pk_val, val in self.lookup_choices: 
    7776            yield {'selected': self.lookup_val == smart_unicode(pk_val), 
    7877                   'query_string': cl.get_query_string({self.lookup_kwarg: pk_val}), 
  • django/trunk/tests/regressiontests/admin_views/models.py

    r9211 r9241  
    7575        return self.id 
    7676 
     77class Color(models.Model): 
     78    value = models.CharField(max_length=10) 
     79    warm = models.BooleanField()    
     80    def __unicode__(self): 
     81        return self.value 
     82 
     83class Thing(models.Model): 
     84    title = models.CharField(max_length=20) 
     85    color = models.ForeignKey(Color, limit_choices_to={'warm': True}) 
     86    def __unicode__(self): 
     87        return self.title 
     88 
     89class ThingAdmin(admin.ModelAdmin): 
     90    list_filter = ('color',) 
     91 
    7792admin.site.register(Article, ArticleAdmin) 
    7893admin.site.register(CustomArticle, CustomArticleAdmin) 
    7994admin.site.register(Section, inlines=[ArticleInline]) 
    8095admin.site.register(ModelWithStringPrimaryKey) 
     96admin.site.register(Color) 
     97admin.site.register(Thing, ThingAdmin) 
  • django/trunk/tests/regressiontests/admin_views/tests.py

    r9211 r9241  
    1313 
    1414class AdminViewBasicTest(TestCase): 
    15     fixtures = ['admin-views-users.xml'
     15    fixtures = ['admin-views-users.xml', 'admin-views-colors.xml'
    1616     
    1717    def setUp(self): 
     
    148148            "Results of sorting on ModelAdmin method are out of order." 
    149149        ) 
     150         
     151    def testLimitedFilter(self): 
     152        """Ensure admin changelist filters do not contain objects excluded via limit_choices_to.""" 
     153        response = self.client.get('/test_admin/admin/admin_views/thing/') 
     154        self.failUnlessEqual(response.status_code, 200) 
     155        self.failUnless( 
     156            '<div id="changelist-filter">' in response.content,  
     157            "Expected filter not found in changelist view." 
     158        ) 
     159        self.failIf( 
     160            '<a href="?color__id__exact=3">Blue</a>' in response.content, 
     161            "Changelist filter not correctly limited by limit_choices_to." 
     162        ) 
    150163     
    151164def get_perm(Model, perm):