A Django Model Manager for Soft Deleting Records and How to Customize the Django Admin

That would work. If you are using a signal (pre_delete or post_delete), you might need to send it from the new function since you wouldn’t want to call the real delete.

I’ve been doing object.deleted = 1 object.save() and not calling or overriding delete(). That way I still have the option to do the real delete in case I need it. You could probably make a real_delete() function to do that if needed though.

Read more comments by Greg Allard