File tree Expand file tree Collapse file tree 3 files changed +35
-4
lines changed
rest_framework_json_api/schemas Expand file tree Collapse file tree 3 files changed +35
-4
lines changed Original file line number Diff line number Diff line change @@ -45,6 +45,8 @@ any parts of the framework not mentioned in the documentation should generally b
4545* Refactored handling of the `sort` query parameter to fix duplicate declaration in the generated schema definition
4646* Non- field serializer errors are given a source.pointer value of " /data" .
4747* Fixed " id" field being added to / data/ attributes in the OpenAPI schema when it is not rendered there.
48+ * Fixed `SerializerMethodResourceRelatedField(many = True )` fields being given
49+ a " reltoone" schema reference instead of " reltomany" .
4850
4951# # [6.0.0] - 2022-09-24
5052
Original file line number Diff line number Diff line change @@ -141,6 +141,28 @@ def test_schema_parameters_include():
141141 assert include_ref not in schema ["paths" ]["/project-types/" ]["get" ]["parameters" ]
142142
143143
144+ def test_schema_serializer_method_resource_related_field ():
145+ """SerializerMethodResourceRelatedField fieds have the correct relation ref."""
146+ patterns = [
147+ re_path ("^entries/?$" , views .EntryViewSet .as_view ({"get" : "list" })),
148+ ]
149+ generator = SchemaGenerator (patterns = patterns )
150+
151+ request = Request (RequestFactory ().get ("/" , {"include" : "featured" }))
152+ schema = generator .get_schema (request = request )
153+
154+ entry_schema = schema ["components" ]["schemas" ]["Entry" ]
155+ entry_relationships = entry_schema ["properties" ]["relationships" ]["properties" ]
156+
157+ rel_to_many_ref = {"$ref" : "#/components/schemas/reltomany" }
158+ assert entry_relationships ["suggested" ] == rel_to_many_ref
159+ assert entry_relationships ["suggestedHyperlinked" ] == rel_to_many_ref
160+
161+ rel_to_one_ref = {"$ref" : "#/components/schemas/reltoone" }
162+ assert entry_relationships ["featured" ] == rel_to_one_ref
163+ assert entry_relationships ["featuredHyperlinked" ] == rel_to_one_ref
164+
165+
144166def test_schema_related_serializers ():
145167 """
146168 Confirm that paths are generated for related fields. For example:
Original file line number Diff line number Diff line change 88
99from rest_framework_json_api import serializers , views
1010from rest_framework_json_api .compat import get_reference
11+ from rest_framework_json_api .relations import ManySerializerMethodResourceRelatedField
1112from rest_framework_json_api .utils import format_field_name
1213
1314
@@ -660,14 +661,20 @@ def map_serializer(self, serializer):
660661 continue
661662 if isinstance (field , serializers .HiddenField ):
662663 continue
663- if isinstance (field , serializers .RelatedField ):
664+ if isinstance (
665+ field ,
666+ (
667+ serializers .ManyRelatedField ,
668+ ManySerializerMethodResourceRelatedField ,
669+ ),
670+ ):
664671 relationships [format_field_name (field .field_name )] = {
665- "$ref" : "#/components/schemas/reltoone "
672+ "$ref" : "#/components/schemas/reltomany "
666673 }
667674 continue
668- if isinstance (field , serializers .ManyRelatedField ):
675+ if isinstance (field , serializers .RelatedField ):
669676 relationships [format_field_name (field .field_name )] = {
670- "$ref" : "#/components/schemas/reltomany "
677+ "$ref" : "#/components/schemas/reltoone "
671678 }
672679 continue
673680 if field .field_name == "id" :
You can’t perform that action at this time.
0 commit comments