I've done it myself by using a very simple JSONField class, but I'm looking into using PostgreSQL HStore for a next iteration, as it allows me to search the models by attributes, something the JSON field doesn't.
Celery natively pickles the arguments to the background callable. Discussion of why we didn't just pass numerical IDs around is covered in the original article's discussion threads.