You could disconnect the post_delete signal for Volume temporarily, but that's a hack.
You probably have to abandon signals on the Volume model. I would attach the post_delete signals logic directly to the Volume.delete() method and add an option to disable signaling:
class Volume(models.Model):
[....]
def my_signal_logic(self):
do_whatever()
def delete(self, *args, **kwargs):
with_signal = kwargs.pop('signal', True)
if with_signal:
self.my_signal_logic()
super().delete(*args, **kwargs)
Then in the post_delete signal for Group, you delete the Volumes explicitly, telling delete() not to signal:
for v in instance.volumes.all():
v.delete(signal=False)
requests.delete('/group/%s' %
instance.pk)
Erik