【发布时间】:2011-02-17 00:20:47
【问题描述】:
class mytable(models.Model):
abc = ...
xyz = ...
def __unicode__(self):
为什么需要def __unicode__?
【问题讨论】:
class mytable(models.Model):
abc = ...
xyz = ...
def __unicode__(self):
为什么需要def __unicode__?
【问题讨论】:
因此管理员可以显示其面包屑,您可以将 {{ myobject }} 放入模板中以显示您的对象的__unicode__。
【讨论】:
<a href="{{ object.get_absolute_url }}">{{ object }}</a> 它是“unicode”而不是“str”,因为 django 到处都使用 unicode。
__unicode__ 是一种 Python 的“魔术方法”,当您想将对象显示为 unicode 字符串时,它可以确定对象的外观。它不是 Django 特定的或任何东西,但任何时候您调用 str() 或 unicode() 或使用字符串插值并将该对象传入,它都会调用该方法来确定返回的 unicode 字符串。
对于模板中显示的对象,将调用此方法来确定模板中显示的内容,因为这是 Python 用来确定对象作为字符串的样子的方法。
【讨论】:
这些资源在解释我可以做到的方面做得更好:
Django Docs
Python Docs__str__ versus __unicode__
简而言之,您需要定义__unicode__,以便Django 在您调用对象时可以打印一些可读的表示。 __unicode__ 也是返回字符串的“新”首选方式。
【讨论】:
根据我的经验,定义__unicode__ 方法有一个非常重要的原因:Django shell。
在开发 Django 应用程序时,使用控制台通常是一个非常强大的工具,因为它允许检查您(和其他)类,以及快速的原型想法和解决方案。
而且,在 shell 中工作时,每次你执行 print a 时,a 是一个模型实例,你会非常感谢有一个 __unicode__ 方法可以轻松识别你正在使用的对象。
【讨论】: