diff options
| author | Tom Christie | 2012-10-04 11:26:41 +0100 |
|---|---|---|
| committer | Tom Christie | 2012-10-04 11:26:41 +0100 |
| commit | d89d6887d2eb8293348cb1a7a043a05352819cb8 (patch) | |
| tree | a01a3e80ec30a3d96fb45664e6c89f13abc84837 /rest_framework/serializers.py | |
| parent | ad2149767bea4fcd07348ca77f6cad5719a44181 (diff) | |
| download | django-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.py | 37 |
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 |
