summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormgaligniana <marcelogaligniana@gmail.com>2021-11-22 16:30:07 -0300
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2021-11-24 09:28:21 +0100
commit7f8f69fb38247827220805f18c2e0f08406d8a3b (patch)
tree92f8918f0c32e7c2a558f5657dd997dd60b4b1b0
parentddf321479b0e006bc4efafe57726d54869f38c14 (diff)
Fixed #33298 -- Added docs and tests for using Q objects with get_object_or_404()/get_list_or_404().
-rw-r--r--docs/topics/http/shortcuts.txt14
-rw-r--r--tests/get_object_or_404/tests.py18
2 files changed, 28 insertions, 4 deletions
diff --git a/docs/topics/http/shortcuts.txt b/docs/topics/http/shortcuts.txt
index 2fedec5ed4..b5f8fd7617 100644
--- a/docs/topics/http/shortcuts.txt
+++ b/docs/topics/http/shortcuts.txt
@@ -157,8 +157,8 @@ will be returned::
but it raises :class:`~django.http.Http404` instead of the model's
:class:`~django.db.models.Model.DoesNotExist` exception.
-Required arguments
-------------------
+Arguments
+---------
``klass``
A :class:`~django.db.models.Model` class,
@@ -166,6 +166,9 @@ Required arguments
or a :class:`~django.db.models.query.QuerySet` instance from which to get
the object.
+``*args``
+ :class:`Q objects <django.db.models.Q>`.
+
``**kwargs``
Lookup parameters, which should be in the format accepted by ``get()`` and
``filter()``.
@@ -230,14 +233,17 @@ will be raised if more than one object is found.
given model manager cast to a list, raising :class:`~django.http.Http404` if
the resulting list is empty.
-Required arguments
-------------------
+Arguments
+---------
``klass``
A :class:`~django.db.models.Model`, :class:`~django.db.models.Manager` or
:class:`~django.db.models.query.QuerySet` instance from which to get the
list.
+``*args``
+ :class:`Q objects <django.db.models.Q>`.
+
``**kwargs``
Lookup parameters, which should be in the format accepted by ``get()`` and
``filter()``.
diff --git a/tests/get_object_or_404/tests.py b/tests/get_object_or_404/tests.py
index 71815d34ef..87bfa6d3ea 100644
--- a/tests/get_object_or_404/tests.py
+++ b/tests/get_object_or_404/tests.py
@@ -1,3 +1,4 @@
+from django.db.models import Q
from django.http import Http404
from django.shortcuts import get_list_or_404, get_object_or_404
from django.test import TestCase
@@ -75,6 +76,23 @@ class GetObjectOr404Tests(TestCase):
get_list_or_404(Article.objects.all(), title__icontains="Run"),
[article]
)
+ # Q objects.
+ self.assertEqual(
+ get_object_or_404(
+ Article,
+ Q(title__startswith='Run') | Q(title__startswith='Walk'),
+ authors__name__contains='Brave',
+ ),
+ article,
+ )
+ self.assertEqual(
+ get_list_or_404(
+ Article,
+ Q(title__startswith='Run') | Q(title__startswith='Walk'),
+ authors__name='Patsy',
+ ),
+ [article],
+ )
def test_bad_class(self):
# Given an argument klass that is not a Model, Manager, or Queryset