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.

@mrchrisadams There's a library for it in Ruby, dunno about Python though. The Ruby thing was called acts_as_paranoid, I think... maybe having a fish around that search term might help.