God dammit past me - why didn't you bookmark the "how to use django and a deleted_items table" article to do easy-to-manage soft deletes in a system?
The general idea was to have a deleted_items table, available in django admin, that items are copied to when you call delete() on an object. It's easy to administer and you don't need loads of special edge cases in code.
This ring any bells, internet ppl?
P.S. Yes this is not perfect. The article goes into detail about these tradeoffs too.