summaryrefslogtreecommitdiff
path: root/django/shortcuts.py
diff options
context:
space:
mode:
authordizballanze <dizballanze@gmail.com>2018-02-17 11:27:46 +0300
committerTim Graham <timograham@gmail.com>2018-02-19 10:51:15 -0500
commiteb002e7892793fb9f593efaed8d3ea52a2bfc96c (patch)
treed4e964ee6fb1db3d5dd9ce9dac9ccc4d0ff94ff8 /django/shortcuts.py
parent9b1125bfc7e2dc747128e6e7e8a2259ff1a7d39f (diff)
Fixed #29135 -- Prevented get_object/list_or_404() from hiding AttributeError raised by QuerySet filtering.
Diffstat (limited to 'django/shortcuts.py')
-rw-r--r--django/shortcuts.py11
1 files changed, 5 insertions, 6 deletions
diff --git a/django/shortcuts.py b/django/shortcuts.py
index 6b35e64f4e..582aee05e5 100644
--- a/django/shortcuts.py
+++ b/django/shortcuts.py
@@ -83,14 +83,14 @@ def get_object_or_404(klass, *args, **kwargs):
one object is found.
"""
queryset = _get_queryset(klass)
- try:
- return queryset.get(*args, **kwargs)
- except AttributeError:
+ if not hasattr(queryset, 'get'):
klass__name = klass.__name__ if isinstance(klass, type) else klass.__class__.__name__
raise ValueError(
"First argument to get_object_or_404() must be a Model, Manager, "
"or QuerySet, not '%s'." % klass__name
)
+ try:
+ return queryset.get(*args, **kwargs)
except queryset.model.DoesNotExist:
raise Http404('No %s matches the given query.' % queryset.model._meta.object_name)
@@ -104,14 +104,13 @@ def get_list_or_404(klass, *args, **kwargs):
arguments and keyword arguments are used in the filter() query.
"""
queryset = _get_queryset(klass)
- try:
- obj_list = list(queryset.filter(*args, **kwargs))
- except AttributeError:
+ if not hasattr(queryset, 'filter'):
klass__name = klass.__name__ if isinstance(klass, type) else klass.__class__.__name__
raise ValueError(
"First argument to get_list_or_404() must be a Model, Manager, or "
"QuerySet, not '%s'." % klass__name
)
+ obj_list = list(queryset.filter(*args, **kwargs))
if not obj_list:
raise Http404('No %s matches the given query.' % queryset.model._meta.object_name)
return obj_list