44from django .utils .encoding import force_text
55from rest_framework import serializers
66from rest_framework .metadata import SimpleMetadata
7+ from rest_framework .settings import api_settings
78from rest_framework .utils .field_mapping import ClassLookupDict
89
910from rest_framework_json_api .utils import get_related_resource_type
@@ -18,8 +19,7 @@ class JSONAPIMetadata(SimpleMetadata):
1819 """
1920 type_lookup = ClassLookupDict ({
2021 serializers .Field : 'GenericField' ,
21- serializers .HyperlinkedIdentityField : 'Relationship' ,
22- serializers .HyperlinkedRelatedField : 'Relationship' ,
22+ serializers .RelatedField : 'Relationship' ,
2323 serializers .BooleanField : 'Boolean' ,
2424 serializers .NullBooleanField : 'Boolean' ,
2525 serializers .CharField : 'String' ,
@@ -43,6 +43,7 @@ class JSONAPIMetadata(SimpleMetadata):
4343 })
4444
4545 relation_type_lookup = ClassLookupDict ({
46+ related .ManyRelatedObjectsDescriptor : 'ManyToMany' ,
4647 related .ReverseManyRelatedObjectsDescriptor : 'ManyToMany' ,
4748 related .ForeignRelatedObjectsDescriptor : 'OneToMany' ,
4849 related .ReverseSingleRelatedObjectDescriptor : 'ManyToOne' ,
@@ -70,6 +71,10 @@ def get_serializer_info(self, serializer):
7071 # If this is a `ListSerializer` then we want to examine the
7172 # underlying child serializer instance instead.
7273 serializer = serializer .child
74+
75+ # Remove the URL field if present
76+ serializer .fields .pop (api_settings .URL_FIELD_NAME )
77+
7378 return OrderedDict (
7479 [(field_name , self .get_field_info (field , serializer )) for field_name , field in serializer .fields .items ()]
7580 )
0 commit comments