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' | 
