From 96aaa24e9b24a3d2938e3c0924bd456f12951d33 Mon Sep 17 00:00:00 2001 From: Tom Christie Date: Wed, 1 Jun 2016 12:47:44 +0100 Subject: [PATCH] Get model managers and names in a version-compatible manner. --- rest_framework/compat.py | 13 +++++++++++++ rest_framework/utils/representation.py | 8 ++++---- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/rest_framework/compat.py b/rest_framework/compat.py index e435618a2..d5c7a19d3 100644 --- a/rest_framework/compat.py +++ b/rest_framework/compat.py @@ -58,6 +58,19 @@ def distinct(queryset, base): return queryset.distinct() +def get_names_and_managers(options): + if django.VERSION >= (1, 10): + return [ + (manager.name, manager) + for manager + in options.managers + ] + return [ + (manager_info[1], manager_info[2]) + for manager_info + in (options.concrete_managers + options.abstract_managers) + ] + # contrib.postgres only supported from 1.8 onwards. try: from django.contrib.postgres import fields as postgres_fields diff --git a/rest_framework/utils/representation.py b/rest_framework/utils/representation.py index 49f829c10..32e6d246a 100644 --- a/rest_framework/utils/representation.py +++ b/rest_framework/utils/representation.py @@ -10,15 +10,15 @@ from django.db import models from django.utils.encoding import force_text from django.utils.functional import Promise -from rest_framework.compat import unicode_repr +from rest_framework.compat import get_names_and_managers, unicode_repr def manager_repr(value): model = value.model opts = model._meta - for _, name, manager in opts.concrete_managers + opts.abstract_managers: - if manager == value: - return '%s.%s.all()' % (model._meta.object_name, name) + for manager_name, manager_instance in get_names_and_managers(opts): + if manager_instance == value: + return '%s.%s.all()' % (model._meta.object_name, manager_name) return repr(value)