I’m doing the same thing and noticed a nugget in the Django docs that you should think about.
Overriding predefined model methods
Overriding Delete
Note that the delete() method for an object is not necessarily called when deleting objects in bulk using a QuerySet. To ensure customized delete logic gets executed, you can use pre_delete and/or post_delete signals.
This means your snippet will not always do what you want. Using Signals is a better option for dealing with deletions.
I went with the following:
import shutil
from django.db.models.signals import pre_delete
from django.dispatch import receiver
@receiver(pre_delete)
def delete_repo(sender, instance, **kwargs):
if sender == Set:
shutil.rmtree(instance.repo)