summaryrefslogtreecommitdiff
path: root/django/db
diff options
context:
space:
mode:
authorGabe Jackson <gabejackson@cxg.ch>2014-03-04 12:23:32 +0100
committerAnssi Kääriäinen <akaariai@gmail.com>2014-03-05 22:37:53 +0200
commitb77f26313cddbfde20dcf2661e9bd35458c2d1bd (patch)
treeed655a90373cf606e304e82eaeceaf025c892328 /django/db
parentc627da0ccc12861163f28177aa7538b420a9d310 (diff)
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.
Diffstat (limited to 'django/db')
-rw-r--r--django/db/models/options.py9
1 files changed, 4 insertions, 5 deletions
diff --git a/django/db/models/options.py b/django/db/models/options.py
index 4e0307fc4f..4eec2df17c 100644
--- a/django/db/models/options.py
+++ b/django/db/models/options.py
@@ -449,9 +449,7 @@ class Options(object):
for f, model in self.get_fields_with_model():
cache[f.name] = cache[f.attname] = (f, model, True, False)
for f in self.virtual_fields:
- if hasattr(f, 'related'):
- cache[f.name] = cache[f.attname] = (
- f.related, None if f.model == self.model else f.model, True, False)
+ cache[f.name] = (f, None if f.model == self.model else f.model, True, False)
if apps.ready:
self._name_map = cache
return cache
@@ -530,8 +528,9 @@ class Options(object):
proxy_cache = cache.copy()
for klass in self.apps.get_models(include_auto_created=True):
if not klass._meta.swapped:
- for f in klass._meta.local_fields:
- if f.rel and not isinstance(f.rel.to, six.string_types) and f.generate_reverse_relation:
+ for f in klass._meta.local_fields + klass._meta.virtual_fields:
+ if (hasattr(f, 'rel') and f.rel and not isinstance(f.rel.to, six.string_types)
+ and f.generate_reverse_relation):
if self == f.rel.to._meta:
cache[f.related] = None
proxy_cache[f.related] = None