If a django migration is migrated to db, what is the best practice if the migration is deleted at a later date?
The first approach I'd try would be to check out the last good commit and recreate the model changes in question so the migration could be regenerated and checked in. 
And while it's good to have a contingency plan for things like this, if it's a real concern I'd suggest evaluating your deployment process to make this issue less likely.
While this shouldn't happen its not impossible.
So what to do in the event that a migration has been run into a database and the migration file has then been deleted and is not recoverable?
this assumes that the database cannot just be dropped.