Ticket #11191: 11191.diff

File 11191.diff, 2.4 KB (added by SmileyChris, 6 years ago)
  • django/contrib/admin/options.py

     
    66from django.contrib.admin import widgets
    77from django.contrib.admin import helpers
    88from django.contrib.admin.util import unquote, flatten_fieldsets, get_deleted_objects, model_ngettext, model_format_dict
    9 from django.core.exceptions import PermissionDenied
     9from django.core.exceptions import PermissionDenied, ValidationError
    1010from django.db import models, transaction
    1111from django.db.models.fields import BLANK_CHOICE_DASH
    1212from django.http import Http404, HttpResponse, HttpResponseRedirect
     
    788788        model = self.model
    789789        opts = model._meta
    790790
     791        queryset = self.queryset(request)
    791792        try:
    792             obj = self.queryset(request).get(pk=unquote(object_id))
    793         except model.DoesNotExist:
     793            pk = queryset.model._meta.pk.to_python(unquote(object_id))
     794            obj = queryset.get(pk=pk)
     795        except (model.DoesNotExist, ValidationError):
    794796            # Don't raise Http404 just yet, because we haven't checked
    795797            # permissions yet. We don't want an unauthenticated user to be able
    796798            # to determine whether a given object exists.
  • tests/regressiontests/admin_views/tests.py

     
    6363
    6464    def testBasicEditGet(self):
    6565        """
    66         A smoke test to ensureGET on the change_view works.
     66        A smoke test to ensure GET on the change_view works.
    6767        """
    6868        response = self.client.get('/test_admin/%s/admin_views/section/1/' % self.urlbit)
    6969        self.failUnlessEqual(response.status_code, 200)
    7070
     71    def testBasicEditGetStringPK(self):
     72        """
     73        A smoke test to ensure GET on the change_view works (returns an HTTP
     74        404 error, see #11191) when passing a string as the PK argument for a
     75        model with an integer PK field.
     76        """
     77        response = self.client.get('/test_admin/%s/admin_views/section/abc/' % self.urlbit)
     78        self.failUnlessEqual(response.status_code, 404)
     79
    7180    def testBasicAddPost(self):
    7281        """
    7382        A smoke test to ensure POST on add_view works.
Back to Top