【问题标题】:Django shell: Model-to-string with unicode fails / fails notDjango shell:带有unicode的模型到字符串失败/失败不是
【发布时间】:2011-04-12 12:56:35
【问题描述】:

谁能给我一个提示,为什么模型实例名称中的元音变音一旦变成垃圾,但在 unicode() 被 'print()'ed 时正确打印?

class Geo(Position):
    name = models.CharField(max_length = 161)

    def __unicode__(self):
        return u'%s' % self.name

在外壳中:

In [10]: Geo.objects.get(pk=1)
Out[10]: <Geo: Eichstätt>
In [11]: print Geo.objects.get(pk=1).__unicode__()
Eichstätt

【问题讨论】:

    标签: django unicode model string


    【解决方案1】:

    如果您在打印语句的末尾去掉__unicode__(),您会发现它仍然可以正常工作。那是因为调用 print 时会自动调用该方法。

    当您在解释器中只键入对象的名称时,调用的方法是__repr__

    请注意,Django 的模型实例在内部都使用 unicode,因此实际上您的 __unicode__ 方法可能只是 return self.name

    【讨论】:

    • 嗯,当我把它关掉时,就像你建议我得到一个“'ascii'编解码器无法在位置 1 编码字符 u'\xf6':序数不在范围内(128)”我从有关 unicode 的文档中复制了 u'%s'。所以,我认为这是“官方”的做法:)
    【解决方案2】:

    Geo.repr() 在您打印时被调用,但不是 unicode 编辑:http://docs.python.org/library/functions.html#repr 我也不确定为什么解析器在方法名称中去掉了下划线

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-18
      • 2018-11-28
      • 2012-06-04
      相关资源
      最近更新 更多