aboutsummaryrefslogtreecommitdiffstats
path: root/rest_framework/serializers.py
diff options
context:
space:
mode:
authorTom Christie2013-06-02 19:50:24 +0100
committerTom Christie2013-06-02 19:50:24 +0100
commit8b73dce51da9f87940a6c18aef31020ba7ee14aa (patch)
tree4f4c164c6106357a745109576bf78a0d841c0518 /rest_framework/serializers.py
parent363b342548a41bfdcc3358595cd9d1de288c4962 (diff)
downloaddjango-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.py15
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'