In django, why does defining __unicode__ method on some types of objects (models, etc.) result in print(obj) printing the output of __unicode__ but if I create my own classes, and define __unicode__, it doesn't seem to get called? I've read about __repr__, but it seems like all the focus in Django is on __unicode__.
What is the relationship between the two, and what is the best practice to get good string representations of my objects in my logs?