mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-08-07 22:04:48 +03:00
Get model managers and names in a version-compatible manner.
This commit is contained in:
parent
9c83ff44a5
commit
96aaa24e9b
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user