diff options
| author | Tom Christie | 2014-09-11 20:37:27 +0100 | 
|---|---|---|
| committer | Tom Christie | 2014-09-11 20:37:27 +0100 | 
| commit | bf52d04f4c370d6917599d26c84b73124d5ef366 (patch) | |
| tree | 4c1b658d796a1f9cf1291501ea202ae02f663681 | |
| parent | ab40780dc2f341a271c2f489659dcd48eb47c07d (diff) | |
| download | django-rest-framework-bf52d04f4c370d6917599d26c84b73124d5ef366.tar.bz2 | |
Nice manager representations on serializer classes
| -rw-r--r-- | rest_framework/utils/representation.py | 13 | ||||
| -rw-r--r-- | tests/test_model_field_mappings.py | 12 | 
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() | 
