@@ -631,6 +631,15 @@ def get_request_body(self, path, method):
631631 ): # noqa E501
632632 if "readOnly" in schema :
633633 del item_schema ["properties" ]["attributes" ]["properties" ][name ]
634+
635+ if "properties" in item_schema and "relationships" in item_schema ["properties" ]:
636+ # No required relationships for PATCH
637+ if (
638+ method in ["PATCH" , "PUT" ]
639+ and "required" in item_schema ["properties" ]["relationships" ]
640+ ):
641+ del item_schema ["properties" ]["relationships" ]["required" ]
642+
634643 return {
635644 "content" : {
636645 ct : {
@@ -653,6 +662,7 @@ def map_serializer(self, serializer):
653662 # TODO: remove attributes, etc. for relationshipView??
654663 required = []
655664 attributes = {}
665+ relationships_required = []
656666 relationships = {}
657667
658668 for field in serializer .fields .values ():
@@ -668,11 +678,15 @@ def map_serializer(self, serializer):
668678 ManySerializerMethodResourceRelatedField ,
669679 ),
670680 ):
681+ if field .required :
682+ relationships_required .append (format_field_name (field .field_name ))
671683 relationships [format_field_name (field .field_name )] = {
672684 "$ref" : "#/components/schemas/reltomany"
673685 }
674686 continue
675687 if isinstance (field , serializers .RelatedField ):
688+ if field .required :
689+ relationships_required .append (format_field_name (field .field_name ))
676690 relationships [format_field_name (field .field_name )] = {
677691 "$ref" : "#/components/schemas/reltoone"
678692 }
@@ -727,6 +741,10 @@ def map_serializer(self, serializer):
727741 "type" : "object" ,
728742 "properties" : relationships ,
729743 }
744+ if relationships_required :
745+ result ["properties" ]["relationships" ][
746+ "required"
747+ ] = relationships_required
730748 return result
731749
732750 def _add_async_response (self , operation ):
0 commit comments