Commit 20e322f4 authored by Baptiste Mispelon's avatar Baptiste Mispelon
Browse files

[1.6.x] Added more examples to the get_object_or_404 documentation.

Backport of ebfa508f from master.
parent ac2ef4af
Loading
Loading
Loading
Loading
+30 −3
Original line number Diff line number Diff line
@@ -239,9 +239,10 @@ Required 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
    object.
    A :class:`~django.db.models.Model` class,
    a :class:`~django.db.models.Manager`,
    or a :class:`~django.db.models.query.QuerySet` instance from which to get
    the object.

``**kwargs``
    Lookup parameters, which should be in the format accepted by ``get()`` and
@@ -268,6 +269,32 @@ This example is equivalent to::
        except MyModel.DoesNotExist:
            raise Http404

The most common use case is to pass a :class:`~django.db.models.Model`, as
shown above. However, you can also pass a
:class:`~django.db.models.query.QuerySet` instance::

    queryset = Book.objects.filter(title__startswith='M')
    get_object_or_404(queryset, pk=1)

The above example is a bit contrived since it's equivalent to doing::

    get_object_or_404(Book, title__startswith='M', pk=1)

but it can be useful if you are passed the ``queryset`` variable from somewhere
else.

Finally, you can also use a :class:`~django.db.models.Manager`. This is useful
for example if you have a
:ref:`custom manager<custom-managers>`::

    get_object_or_404(Book.dahl_objects, title='Matilda')

You can also use
:class:`related managers<django.db.models.fields.related.RelatedManager>`::

    author = Author.objects.get(name='Roald Dahl')
    get_object_or_404(author.book_set, title='Matilda')

Note: As with ``get()``, a
:class:`~django.core.exceptions.MultipleObjectsReturned` exception
will be raised if more than one object is found.