diff options
| author | Tom Christie | 2013-06-02 19:50:24 +0100 |
|---|---|---|
| committer | Tom Christie | 2013-06-02 19:50:24 +0100 |
| commit | 8b73dce51da9f87940a6c18aef31020ba7ee14aa (patch) | |
| tree | 4f4c164c6106357a745109576bf78a0d841c0518 /rest_framework/serializers.py | |
| parent | 363b342548a41bfdcc3358595cd9d1de288c4962 (diff) | |
| download | django-rest-framework-8b73dce51da9f87940a6c18aef31020ba7ee14aa.tar.bz2 | |
view_name argument to HyperlinkedModelSerializer is now properly enforced. Closes #471
Diffstat (limited to 'rest_framework/serializers.py')
| -rw-r--r-- | rest_framework/serializers.py | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/rest_framework/serializers.py b/rest_framework/serializers.py index 4dde0d7c..a4969f60 100644 --- a/rest_framework/serializers.py +++ b/rest_framework/serializers.py @@ -903,15 +903,24 @@ class HyperlinkedModelSerializer(ModelSerializer): _default_view_name = '%(model_name)s-detail' _hyperlink_field_class = HyperlinkedRelatedField - url = HyperlinkedIdentityField() + # Just a placeholder to ensure 'url' is the first field + # The field itself is actually created on initialization, + # when the view_name and lookup_field arguments are available. + url = Field() def __init__(self, *args, **kwargs): super(HyperlinkedModelSerializer, self).__init__(*args, **kwargs) - lookup_field = self.opts.lookup_field - self.fields['url'] = HyperlinkedIdentityField(lookup_field=lookup_field) + if self.opts.view_name is None: self.opts.view_name = self._get_default_view_name(self.opts.model) + url_field = HyperlinkedIdentityField( + view_name=self.opts.view_name, + lookup_field=self.opts.lookup_field + ) + url_field.initialize(self, 'url') + self.fields['url'] = url_field + def _get_default_view_name(self, model): """ Return the view name to use if 'view_name' is not specified in 'Meta' |
