From 5a72847b766e3e58b8002d478040274503d5c8a5 Mon Sep 17 00:00:00 2001 From: Pierre Dulac Date: Fri, 16 Oct 2015 15:24:40 +0200 Subject: [PATCH] Use backward compatible implementation for the meta api calls --- rest_framework/utils/model_meta.py | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/rest_framework/utils/model_meta.py b/rest_framework/utils/model_meta.py index d16630ed6..4027f422f 100644 --- a/rest_framework/utils/model_meta.py +++ b/rest_framework/utils/model_meta.py @@ -126,7 +126,15 @@ def _get_reverse_relationships(opts): # See: https://code.djangoproject.com/ticket/24208 reverse_relations = OrderedDict() - for relation in opts.get_all_related_objects(): + + # The backward implementation can be found in the Django Documentation + # See: https://docs.djangoproject.com/en/1.9/ref/models/meta/#migrating-from-the-old-api + related_objects = [ + f for f in opts.get_fields() + if (f.one_to_many or f.one_to_one) and f.auto_created + ] + + for relation in related_objects: accessor_name = relation.get_accessor_name() related = getattr(relation, 'related_model', relation.model) reverse_relations[accessor_name] = RelationInfo( @@ -136,8 +144,15 @@ def _get_reverse_relationships(opts): has_through_model=False ) + # The backward implementation can be found in the Django Documentation + # See: https://docs.djangoproject.com/en/1.9/ref/models/meta/#migrating-from-the-old-api + all_related_to_many_objects = [ + f for f in opts.get_fields(include_hidden=True) + if f.many_to_many and f.auto_created + ] + # Deal with reverse many-to-many relationships. - for relation in opts.get_all_related_many_to_many_objects(): + for relation in all_related_to_many_objects: accessor_name = relation.get_accessor_name() related = getattr(relation, 'related_model', relation.model) reverse_relations[accessor_name] = RelationInfo(