diff options
| author | mgaligniana <marcelogaligniana@gmail.com> | 2021-11-22 16:30:07 -0300 |
|---|---|---|
| committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2021-11-24 09:28:21 +0100 |
| commit | 7f8f69fb38247827220805f18c2e0f08406d8a3b (patch) | |
| tree | 92f8918f0c32e7c2a558f5657dd997dd60b4b1b0 | |
| parent | ddf321479b0e006bc4efafe57726d54869f38c14 (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.txt | 14 | ||||
| -rw-r--r-- | tests/get_object_or_404/tests.py | 18 |
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 |
