Extract modern code from get_names_and_managers in compat.py and remove compat code

This commit is contained in:
Levi Payne 2017-10-02 20:06:28 -04:00 committed by Carlton Gibson
parent 07cad57ed4
commit 1e20f5c961
2 changed files with 7 additions and 21 deletions

View File

@ -78,25 +78,6 @@ def distinct(queryset, base):
return queryset.distinct() return queryset.distinct()
# TODO: Remove
# Obtaining manager instances and names from model options differs after 1.10.
def get_names_and_managers(options):
if django.VERSION >= (1, 10):
# Django 1.10 onwards provides a `.managers` property on the Options.
return [
(manager.name, manager)
for manager
in options.managers
]
# For Django 1.8 and 1.9, use the three-tuple information provided
# by .concrete_managers and .abstract_managers
return [
(manager_info[1], manager_info[2])
for manager_info
in (options.concrete_managers + options.abstract_managers)
]
# TODO: Remove # TODO: Remove
# field.rel is deprecated from 1.9 onwards # field.rel is deprecated from 1.9 onwards
def get_remote_field(field, **kwargs): def get_remote_field(field, **kwargs):

View File

@ -10,13 +10,18 @@ from django.db import models
from django.utils.encoding import force_text from django.utils.encoding import force_text
from django.utils.functional import Promise from django.utils.functional import Promise
from rest_framework.compat import get_names_and_managers, unicode_repr from rest_framework.compat import unicode_repr
def manager_repr(value): def manager_repr(value):
model = value.model model = value.model
opts = model._meta opts = model._meta
for manager_name, manager_instance in get_names_and_managers(opts): names_and_managers = [
(manager.name, manager)
for manager
in opts.managers
]
for manager_name, manager_instance in names_and_managers:
if manager_instance == value: if manager_instance == value:
return '%s.%s.all()' % (model._meta.object_name, manager_name) return '%s.%s.all()' % (model._meta.object_name, manager_name)
return repr(value) return repr(value)