Django

Code

Changeset 9245

Show
Ignore:
Timestamp:
10/22/08 18:09:35 (3 months ago)
Author:
kmtracey
Message:

Fixed #9252 -- Moved the try/except protecting against incorrect lookup params to where the error is now raised, and added a test for this case.

Files:

Legend:

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

    r9211 r9245  
    100100        paginator = Paginator(self.query_set, self.list_per_page) 
    101101        # Get the number of objects, with admin filters applied. 
    102         try: 
    103             result_count = paginator.count 
    104         # Naked except! Because we don't have any other way of validating 
    105         # "params". They might be invalid if the keyword arguments are 
    106         # incorrect, or if the values are not in the correct type (which would 
    107         # result in a database error). 
    108         except: 
    109             raise IncorrectLookupParameters 
     102        result_count = paginator.count 
    110103 
    111104        # Get the total number of objects, with no admin filters applied. 
     
    193186 
    194187        # Apply lookup parameters from the query string. 
    195         qs = qs.filter(**lookup_params) 
     188        try: 
     189            qs = qs.filter(**lookup_params) 
     190        # Naked except! Because we don't have any other way of validating "params". 
     191        # They might be invalid if the keyword arguments are incorrect, or if the 
     192        # values are not in the correct type, so we might get FieldError, ValueError, 
     193        # ValicationError, or ? from a custom field that raises yet something else  
     194        # when handed impossible data. 
     195        except: 
     196            raise IncorrectLookupParameters 
    196197 
    197198        # Use select_related() if one of the list_display options is a field 
  • django/trunk/tests/regressiontests/admin_views/tests.py

    r9241 r9245  
    161161            "Changelist filter not correctly limited by limit_choices_to." 
    162162        ) 
    163      
     163         
     164    def testIncorrectLookupParameters(self): 
     165        """Ensure incorrect lookup parameters are handled gracefully.""" 
     166        response = self.client.get('/test_admin/admin/admin_views/thing/', {'notarealfield': '5'}) 
     167        self.assertRedirects(response, '/test_admin/admin/admin_views/thing/?e=1')         
     168        response = self.client.get('/test_admin/admin/admin_views/thing/', {'color__id__exact': 'StringNotInteger!'}) 
     169        self.assertRedirects(response, '/test_admin/admin/admin_views/thing/?e=1') 
     170             
    164171def get_perm(Model, perm): 
    165172    """Return the permission object, for the Model"""