File tree Expand file tree Collapse file tree 2 files changed +19
-0
lines changed Expand file tree Collapse file tree 2 files changed +19
-0
lines changed Original file line number Diff line number Diff line change @@ -385,6 +385,8 @@ def map_field(self, field):
385
385
'items' : self .map_field (field .child_relation )
386
386
}
387
387
if isinstance (field , serializers .PrimaryKeyRelatedField ):
388
+ if getattr (field , "pk_field" , False ):
389
+ return self .map_field (field = field .pk_field )
388
390
model = getattr (field .queryset , 'model' , None )
389
391
if model is not None :
390
392
model_field = model ._meta .pk
Original file line number Diff line number Diff line change 19
19
from rest_framework .schemas .openapi import AutoSchema , SchemaGenerator
20
20
21
21
from . import views
22
+ from ..models import BasicModel
22
23
23
24
24
25
def create_request (path ):
@@ -129,6 +130,22 @@ class Meta:
129
130
assert data ['properties' ]['ro_field' ]['nullable' ], "ro_field nullable must be true"
130
131
assert data ['properties' ]['ro_field' ]['readOnly' ], "ro_field read_only must be true"
131
132
133
+ def test_primary_key_related_field (self ):
134
+ class PrimaryKeyRelatedFieldSerializer (serializers .Serializer ):
135
+ basic = serializers .PrimaryKeyRelatedField (queryset = BasicModel .objects .all ())
136
+ uuid = serializers .PrimaryKeyRelatedField (queryset = BasicModel .objects .all (),
137
+ pk_field = serializers .UUIDField ())
138
+ char = serializers .PrimaryKeyRelatedField (queryset = BasicModel .objects .all (),
139
+ pk_field = serializers .CharField ())
140
+
141
+ serializer = PrimaryKeyRelatedFieldSerializer ()
142
+ inspector = AutoSchema ()
143
+
144
+ data = inspector .map_serializer (serializer = serializer )
145
+ assert data ['properties' ]['basic' ]['type' ] == "integer"
146
+ assert data ['properties' ]['uuid' ]['format' ] == "uuid"
147
+ assert data ['properties' ]['char' ]['type' ] == "string"
148
+
132
149
133
150
@pytest .mark .skipif (uritemplate is None , reason = 'uritemplate not installed.' )
134
151
class TestOperationIntrospection (TestCase ):
You can’t perform that action at this time.
0 commit comments