@@ -904,34 +904,20 @@ class HyperlinkedModelSerializer(ModelSerializer):
904
904
_default_view_name = '%(model_name)s-detail'
905
905
_hyperlink_field_class = HyperlinkedRelatedField
906
906
907
- # Just a placeholder to ensure 'url' is the first field
908
- # The field itself is actually created on initialization,
909
- # when the view_name and lookup_field arguments are available.
910
- url = Field ()
911
-
912
- def __init__ (self , * args , ** kwargs ):
913
- super (HyperlinkedModelSerializer , self ).__init__ (* args , ** kwargs )
907
+ def get_default_fields (self ):
908
+ fields = super (HyperlinkedModelSerializer , self ).get_default_fields ()
914
909
915
910
if self .opts .view_name is None :
916
911
self .opts .view_name = self ._get_default_view_name (self .opts .model )
917
912
918
- url_field = HyperlinkedIdentityField (
919
- view_name = self . opts . view_name ,
920
- lookup_field = self .opts .lookup_field
921
- )
922
- url_field . initialize ( self , 'url' )
923
- self . fields [ 'url' ] = url_field
913
+ if 'url' not in fields :
914
+ url_field = HyperlinkedIdentityField (
915
+ view_name = self .opts .view_name ,
916
+ lookup_field = self . opts . lookup_field
917
+ )
918
+ fields . insert ( 0 , 'url' , url_field )
924
919
925
- def _get_default_view_name (self , model ):
926
- """
927
- Return the view name to use if 'view_name' is not specified in 'Meta'
928
- """
929
- model_meta = model ._meta
930
- format_kwargs = {
931
- 'app_label' : model_meta .app_label ,
932
- 'model_name' : model_meta .object_name .lower ()
933
- }
934
- return self ._default_view_name % format_kwargs
920
+ return fields
935
921
936
922
def get_pk_field (self , model_field ):
937
923
if self .opts .fields and model_field .name in self .opts .fields :
@@ -966,3 +952,14 @@ def get_identity(self, data):
966
952
return data .get ('url' , None )
967
953
except AttributeError :
968
954
return None
955
+
956
+ def _get_default_view_name (self , model ):
957
+ """
958
+ Return the view name to use if 'view_name' is not specified in 'Meta'
959
+ """
960
+ model_meta = model ._meta
961
+ format_kwargs = {
962
+ 'app_label' : model_meta .app_label ,
963
+ 'model_name' : model_meta .object_name .lower ()
964
+ }
965
+ return self ._default_view_name % format_kwargs
0 commit comments