@@ -251,6 +251,18 @@ def get(self, request, *args, **kwargs):
251
251
serializer_instance = self ._instantiate_serializer (related_instance )
252
252
return Response (serializer_instance .data )
253
253
254
+ def remove_relationships (self , instance_manager , field ):
255
+ field_object = getattr (instance_manager , field )
256
+
257
+ if getattr (field_object , "null" ):
258
+ for obj in instance_manager .all ():
259
+ setattr (obj , field_object .name , None )
260
+ obj .save ()
261
+ else :
262
+ instance_manager .all ().delete ()
263
+
264
+ return instance_manager
265
+
254
266
def patch (self , request , * args , ** kwargs ):
255
267
parent_obj = self .get_object ()
256
268
related_instance_or_manager = self .get_related_instance ()
@@ -261,7 +273,17 @@ def patch(self, request, *args, **kwargs):
261
273
data = request .data , model_class = related_model_class , many = True
262
274
)
263
275
serializer .is_valid (raise_exception = True )
264
- related_instance_or_manager .all ().delete ()
276
+ # related_instance_or_manager.all().delete()
277
+
278
+ # for to one
279
+ if hasattr (related_instance_or_manager , "field" ):
280
+ related_instance_or_manager = self .remove_relationships (instance_manager = related_instance_or_manager ,
281
+ field = "field" )
282
+ # for to many
283
+ else :
284
+ related_instance_or_manager = self .remove_relationships (instance_manager = related_instance_or_manager ,
285
+ field = "target_field" )
286
+
265
287
# have to set bulk to False since data isn't saved yet
266
288
class_name = related_instance_or_manager .__class__ .__name__
267
289
if class_name != 'ManyRelatedManager' :
0 commit comments