From b77f26313cddbfde20dcf2661e9bd35458c2d1bd Mon Sep 17 00:00:00 2001 From: Gabe Jackson Date: Tue, 4 Mar 2014 12:23:32 +0100 Subject: Fixed #22207 -- Added support for GenericRelation reverse lookups GenericRelation now supports an optional related_query_name argument. Setting related_query_name adds a relation from the related object back to the content type for filtering, ordering and other query operations. Thanks to Loic Bistuer for spotting a couple of important issues in his review. --- docs/ref/contrib/contenttypes.txt | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) (limited to 'docs/ref') diff --git a/docs/ref/contrib/contenttypes.txt b/docs/ref/contrib/contenttypes.txt index d01fc6baa5..bc8f538857 100644 --- a/docs/ref/contrib/contenttypes.txt +++ b/docs/ref/contrib/contenttypes.txt @@ -373,6 +373,15 @@ Reverse generic relations This class used to be defined in ``django.contrib.contenttypes.generic``. + .. attribute:: related_query_name + + .. versionadded:: 1.7 + + The relation on the related object back to this object doesn't exist by + default. Setting ``related_query_name`` creates a relation from the + related object back to this one. This allows querying and filtering + from the related object. + If you know which models you'll be using most often, you can also add a "reverse" generic relationship to enable an additional API. For example:: @@ -392,6 +401,20 @@ be used to retrieve their associated ``TaggedItems``:: >>> b.tags.all() [, ] +.. versionadded:: 1.7 + +Defining :class:`~django.contrib.contenttypes.fields.GenericRelation` with +``related_query_name`` set allows querying from the related object:: + + tags = GenericRelation(TaggedItem, related_query_name='bookmarks') + +This enables filtering, ordering, and other query operations on ``Bookmark`` +from ``TaggedItem``:: + + >>> # Get all tags belonging to books containing `django` in the url + >>> TaggedItem.objects.filter(bookmarks__url__contains='django') + [, ] + Just as :class:`~django.contrib.contenttypes.fields.GenericForeignKey` accepts the names of the content-type and object-ID fields as arguments, so too does -- cgit v1.3