d54wvzc+i5zirs,
Вы немного запутались в методах которые используются для представления объектов.
__repr__ - в идеале, должен возращать такое значение, при помощи которого можно было бы создать такой же объект. Но зачастую такое невозможно, потому следует вернуть
string, который бы однозначно описывал этот объект. В алхмии я использую что-то вроде:
def __repr__(self):
return u'<Book(id={}, author={}, name={})>'.format(self.id, self.author, self.name).encode('utf-8')
__str__ - возращаем
string. Это произвольное описание вашего объекта. Если метод __str__ не определен, то вернется значение из __repr__
def __str__(self):
return u'{}: {}'.format(self.author, self.name).encode('utf-8')
__unicode__ - должен вернуть
unicode. Смысл точно такой-же как и __str__. Этот метод вызывается когда надо представить объект в unicode. Наример: unicode(myobj).
def __unicode__(self):
return u'{}: {}'.format(self.author, self.name)
Для себя я решил, что описываю все в __unicode__, а в __str__ делаю так:
def __str__(self):
return self.__unicode__().encode('utf-8')
Т.е., у вас была ошибка в том, что из __repr__ вы возвращали
unicode, вместо
string