Skip to content

Commit a251b93

Browse files
authored
Merge pull request #5126 from njamaleddine/get_object_or_404_fix
Add ValidationError to except in get_object_or_404 for django 1.11
2 parents 69b0ac5 + cdb8a3c commit a251b93

File tree

2 files changed

+21
-2
lines changed

2 files changed

+21
-2
lines changed

rest_framework/generics.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
"""
44
from __future__ import unicode_literals
55

6+
from django.core.exceptions import ValidationError
67
from django.db.models.query import QuerySet
78
from django.http import Http404
89
from django.shortcuts import get_object_or_404 as _get_object_or_404
@@ -18,7 +19,7 @@ def get_object_or_404(queryset, *filter_args, **filter_kwargs):
1819
"""
1920
try:
2021
return _get_object_or_404(queryset, *filter_args, **filter_kwargs)
21-
except (TypeError, ValueError):
22+
except (TypeError, ValueError, ValidationError):
2223
raise Http404
2324

2425

tests/test_generics.py

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import pytest
44
from django.db import models
5+
from django.http import Http404
56
from django.shortcuts import get_object_or_404
67
from django.test import TestCase
78
from django.utils import six
@@ -10,7 +11,8 @@
1011
from rest_framework.response import Response
1112
from rest_framework.test import APIRequestFactory
1213
from tests.models import (
13-
BasicModel, ForeignKeySource, ForeignKeyTarget, RESTFrameworkModel
14+
BasicModel, ForeignKeySource, ForeignKeyTarget, RESTFrameworkModel,
15+
UUIDForeignKeyTarget
1416
)
1517

1618
factory = APIRequestFactory()
@@ -647,3 +649,19 @@ def destroy(self, request, *args, **kwargs):
647649
view.delete('test request', 'test arg', test_kwarg='test')
648650
assert view.called is True
649651
assert view.call_args == data
652+
653+
654+
class GetObjectOr404Tests(TestCase):
655+
def setUp(self):
656+
super(GetObjectOr404Tests, self).setUp()
657+
self.uuid_object = UUIDForeignKeyTarget.objects.create(name='bar')
658+
659+
def test_get_object_or_404_with_valid_uuid(self):
660+
obj = generics.get_object_or_404(
661+
UUIDForeignKeyTarget, pk=self.uuid_object.pk
662+
)
663+
assert obj == self.uuid_object
664+
665+
def test_get_object_or_404_with_invalid_string_for_uuid(self):
666+
with pytest.raises(Http404):
667+
generics.get_object_or_404(UUIDForeignKeyTarget, pk='not-a-uuid')

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy