The reason Django implements its own cascade delete logic is so it can send the pre_delete and post_delete signal for all objects that are cascade deleted. I don't think changing that logic is the correct path forward as that might cause other fallout.
I do think your correct in that we should retry in this case. We have builtin retry mechanism for handling serialization issues like this. I think that needs to be extended to handle this case correctly.
The reason Django implements its own cascade delete logic is so it can send the pre_delete and post_delete signal for all objects that are cascade deleted. I don't think changing that logic is the correct path forward as that might cause other fallout.
I do think your correct in that we should retry in this case. We have builtin retry mechanism for handling serialization issues like this. I think that needs to be extended to handle this case correctly.