6

在从源代码安装了 Django 的开发源代码以及 PostgreSQL 以及从源代码需要的所有其他内容之后,我正在完成 Django 教程。我正在尝试在 Ubuntu 12.10 上使用 python3 而不是 python 来做所有事情。

一切似乎都很顺利,直到我进入教程中的部分,我们应该重新定义__unicode__()以便在我们从表中请求 objects.all() 时返回合理的结果。它根本不起作用。我决定试一试__str__(),它奏效了!

但是,本教程解释说我们不应该重新定义__str__(). 那么,我的安装有什么问题__unicode__()__str__()?本教程中的其他方法工作正常。

4

1 回答 1

8

在 Python 3 和 2 中,字符串的处理方式不同。

2、__str__()返回字节,同时__unicode__()返回字符。在 3 中,__str__()现在返回字符,因为字符串现在是原生 unicode,并且__unicode__()不存在。如果你真的需要旧的 2 行为__str__(),我相信它是现在__bytes__()

简短的回答,如果您使用的是 Python 3,请坚持__str__()使用,并意识到 Django 教程明确声明它们是为 2.x 编写的,因此会有差异。

于 2012-11-13T08:14:05.197 回答