|
14 | 14 | from django.utils.six.moves.urllib import parse as urlparse
|
15 | 15 | from django.utils.translation import ugettext_lazy as _
|
16 | 16 |
|
| 17 | +from rest_framework.exceptions import ObjectValueError |
17 | 18 | from rest_framework.fields import (
|
18 | 19 | Field, empty, get_attribute, is_simple_callable, iter_options
|
19 | 20 | )
|
@@ -296,7 +297,12 @@ def get_object(self, view_name, view_args, view_kwargs):
|
296 | 297 | """
|
297 | 298 | lookup_value = view_kwargs[self.lookup_url_kwarg]
|
298 | 299 | lookup_kwargs = {self.lookup_field: lookup_value}
|
299 |
| - return self.get_queryset().get(**lookup_kwargs) |
| 300 | + queryset = self.get_queryset() |
| 301 | + |
| 302 | + try: |
| 303 | + return queryset.get(**lookup_kwargs) |
| 304 | + except (TypeError, ValueError) as exc: |
| 305 | + six.raise_from(ObjectValueError(), exc) |
300 | 306 |
|
301 | 307 | def get_url(self, obj, view_name, request, format):
|
302 | 308 | """
|
@@ -346,7 +352,7 @@ def to_internal_value(self, data):
|
346 | 352 |
|
347 | 353 | try:
|
348 | 354 | return self.get_object(match.view_name, match.args, match.kwargs)
|
349 |
| - except (ObjectDoesNotExist, TypeError, ValueError): |
| 355 | + except (ObjectDoesNotExist, ObjectValueError): |
350 | 356 | self.fail('does_not_exist')
|
351 | 357 |
|
352 | 358 | def to_representation(self, value):
|
|
0 commit comments