Get model managers and names in a version-compatible manner.

This commit is contained in:
Tom Christie 2016-06-01 12:47:44 +01:00
parent 9c83ff44a5
commit 96aaa24e9b
2 changed files with 17 additions and 4 deletions

View File

@ -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

View File

@ -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)