aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTom Christie2014-09-11 20:37:27 +0100
committerTom Christie2014-09-11 20:37:27 +0100
commitbf52d04f4c370d6917599d26c84b73124d5ef366 (patch)
tree4c1b658d796a1f9cf1291501ea202ae02f663681
parentab40780dc2f341a271c2f489659dcd48eb47c07d (diff)
downloaddjango-rest-framework-bf52d04f4c370d6917599d26c84b73124d5ef366.tar.bz2
Nice manager representations on serializer classes
-rw-r--r--rest_framework/utils/representation.py13
-rw-r--r--tests/test_model_field_mappings.py12
2 files changed, 19 insertions, 6 deletions
diff --git a/rest_framework/utils/representation.py b/rest_framework/utils/representation.py
index 1a4d1a62..71db1886 100644
--- a/rest_framework/utils/representation.py
+++ b/rest_framework/utils/representation.py
@@ -2,10 +2,23 @@
Helper functions for creating user-friendly representations
of serializer classes and serializer fields.
"""
+from django.db import models
import re
+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)
+ return repr(value)
+
+
def smart_repr(value):
+ if isinstance(value, models.Manager):
+ return manager_repr(value)
+
value = repr(value)
# Representations like u'help text'
diff --git a/tests/test_model_field_mappings.py b/tests/test_model_field_mappings.py
index 57c97cb7..6e9aaba6 100644
--- a/tests/test_model_field_mappings.py
+++ b/tests/test_model_field_mappings.py
@@ -81,9 +81,9 @@ class RelationalModel(models.Model):
RELATIONAL_FLAT_REPR = """
TestSerializer():
id = IntegerField(label='ID', read_only=True)
- foreign_key = PrimaryKeyRelatedField(label='foreign key', queryset=<django.db.models.manager.Manager object>)
- one_to_one = PrimaryKeyRelatedField(label='one to one', queryset=<django.db.models.manager.Manager object>)
- many_to_many = PrimaryKeyRelatedField(label='many to many', many=True, queryset=<django.db.models.manager.Manager object>)
+ foreign_key = PrimaryKeyRelatedField(label='foreign key', queryset=ForeignKeyTargetModel.objects.all())
+ one_to_one = PrimaryKeyRelatedField(label='one to one', queryset=OneToOneTargetModel.objects.all())
+ many_to_many = PrimaryKeyRelatedField(label='many to many', many=True, queryset=ManyToManyTargetModel.objects.all())
""".strip()
@@ -105,9 +105,9 @@ TestSerializer():
HYPERLINKED_FLAT_REPR = """
TestSerializer():
url = HyperlinkedIdentityField(view_name='relationalmodel-detail')
- foreign_key = HyperlinkedRelatedField(label='foreign key', queryset=<django.db.models.manager.Manager object>, view_name='foreignkeytargetmodel-detail')
- one_to_one = HyperlinkedRelatedField(label='one to one', queryset=<django.db.models.manager.Manager object>, view_name='onetoonetargetmodel-detail')
- many_to_many = HyperlinkedRelatedField(label='many to many', many=True, queryset=<django.db.models.manager.Manager object>, view_name='manytomanytargetmodel-detail')
+ foreign_key = HyperlinkedRelatedField(label='foreign key', queryset=ForeignKeyTargetModel.objects.all(), view_name='foreignkeytargetmodel-detail')
+ one_to_one = HyperlinkedRelatedField(label='one to one', queryset=OneToOneTargetModel.objects.all(), view_name='onetoonetargetmodel-detail')
+ many_to_many = HyperlinkedRelatedField(label='many to many', many=True, queryset=ManyToManyTargetModel.objects.all(), view_name='manytomanytargetmodel-detail')
""".strip()