Skip to content

Commit a251b93

Browse files
authored
Merge pull request encode#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)