在安装了Django的开发源以及源码中的PostgreSQL以及源码所需的一切之后,我正在完成Django教程。我想在Ubuntu 12.10上用python3而不是python做一切。
在我进入教程中我们应该重新定义__unicode__()
以便在我们从表中请求objects.all()时返回合理结果时,一切似乎都进展顺利。它根本不起作用。我决定尝试__str__()
,它有效!
但是,教程解释说我们不应该重新定义__str__()
。那么,__unicode__()
在__str__()
执行时{{1}}不起作用的安装有什么问题?本教程中的其他方法工作正常。
答案 0 :(得分:8)
在Python 3 vs 2中,字符串的处理方式不同。
在2中,__str__()
返回字节,而__unicode__()
返回字符。在3中,__str__()
现在返回字符,因为字符串现在是本机unicode,并且__unicode__()
不存在。如果你真的需要__str__()
的旧2行为,我相信它现在是__bytes__()
。
简短回答,如果您使用的是Python 3,请坚持使用__str__()
,并意识到Django教程明确指出它们是针对2.x编写的,因此会有差异。