aboutsummaryrefslogtreecommitdiffstats
path: root/rest_framework/serializers.py
diff options
context:
space:
mode:
authorTom Christie2012-10-04 11:26:41 +0100
committerTom Christie2012-10-04 11:26:41 +0100
commitd89d6887d2eb8293348cb1a7a043a05352819cb8 (patch)
treea01a3e80ec30a3d96fb45664e6c89f13abc84837 /rest_framework/serializers.py
parentad2149767bea4fcd07348ca77f6cad5719a44181 (diff)
downloaddjango-rest-framework-d89d6887d2eb8293348cb1a7a043a05352819cb8.tar.bz2
HyperlinkedModelSerializer with working HyperlinkedIdentityField, but no hyperlinked relations
Diffstat (limited to 'rest_framework/serializers.py')
-rw-r--r--rest_framework/serializers.py37
1 files changed, 37 insertions, 0 deletions
diff --git a/rest_framework/serializers.py b/rest_framework/serializers.py
index 03763824..990a4f9a 100644
--- a/rest_framework/serializers.py
+++ b/rest_framework/serializers.py
@@ -396,3 +396,40 @@ class ModelSerializer(RelatedField, Serializer):
"""
self.object.save()
return self.object.object
+
+
+class HyperlinkedModelSerializerOptions(ModelSerializerOptions):
+ """
+ Options for HyperlinkedModelSerializer
+ """
+ def __init__(self, meta):
+ super(HyperlinkedModelSerializerOptions, self).__init__(meta)
+ self.view_name = getattr(meta, 'view_name', None)
+
+
+class HyperlinkedModelSerializer(ModelSerializer):
+ """
+ """
+ _options_class = HyperlinkedModelSerializerOptions
+ _default_view_name = '%(model_name)s-detail'
+
+ url = HyperlinkedIdentityField()
+
+ def __init__(self, *args, **kwargs):
+ super(HyperlinkedModelSerializer, self).__init__(*args, **kwargs)
+ if self.opts.view_name is None:
+ self.opts.view_name = self._get_default_view_name()
+
+ def _get_default_view_name(self):
+ """
+ Return the view name to use if 'view_name' is not specified in 'Meta'
+ """
+ model_meta = self.opts.model._meta
+ format_kwargs = {
+ 'app_label': model_meta.app_label,
+ 'model_name': model_meta.object_name.lower()
+ }
+ return self._default_view_name % format_kwargs
+
+ def get_pk_field(self, model_field):
+ return None