Why __unicode__ doesn't work but __str__ does?
it looks like you are using Python3.x
and here is the relevant documentation on Str and Unicode methods
In Python 2, the object model specifies
__str__()
and__unicode__()
methods. If these methods exist, they must return str (bytes) and unicode (text) respectively.The print statement and the str() built-in call
__str__()
to determine the human-readable representation of an object. The unicode() built-in calls__unicode__()
if it exists, and otherwise falls back to__str__()
and decodes the result with the system encoding. Conversely, the Model base class automatically derives__str__()
from__unicode__()
by encoding to UTF-8.In Python 3, there’s simply
__str__()
, which must return str (text).
So
On Python 3, the decorator is a no-op. On Python 2, it defines appropriate
__unicode__()
and__str__()
methods (replacing the original__str__()
method in the process).
If it's not the python 3 thing, your code as posted has incorrect indentation - not sure if copy/pasting bug or if that's how it is in the code. But your User
model's methods need to be indented, like so:
from django.db import models
class User(models.Model):
username = models.CharField(max_length=200)
reg_date = models.DateTimeField('registry date')
def __unicode__(self):
return self.username