How do I override delete() on a model and have it still work with related deletes

后端 未结 8 1417
一向
一向 2020-12-13 09:24

I\'m having a problem because I\'m deleting a Widget by using some_widget_instance.delete(). I also have a model called WidgetFile with an override delete() method so that I

8条回答
  •  别那么骄傲
    2020-12-13 09:59

    I figured it out. I just put this on that Widget model:

    def delete(self):
        files = WidgetFile.objects.filter(widget=self)
        if files:
            for file in files:
                file.delete()
        super(Widget, self).delete()
    

    This triggered the necessary delete() method on each of the related objects, thus triggering my custom file deleting code. It's more database expensive yes, but when you're trying to delete files on a hard drive anyway, it's not such a big expense to hit the db a few extra times.

提交回复
热议问题