django admin中的特殊字符

时间:2013-07-30 14:35:12

标签: django unicode ascii admin codec

简单,真的。 使用MySQL后端,我正在尝试从Django管理员中保存名为“Protégé”的模型实例。 但我得到了可怕的unicode错误:

UnicodeDecodeError at /admin/foo/bar/226/
'ascii' codec can't decode byte 0xc3 in position 4: ordinal not in range(128)

有没有办法在不扩展管理员的情况下解决这个问题? 表格为DEFAULT CHARSET=utf8

谢谢!

P.S。直接运行生成的SQL可以正常工作

2 个答案:

答案 0 :(得分:3)

我在某些模型中遇到了同样的问题 - 基本上在我忘记正确覆盖unicode方法的所有模型中。在我的情况下,我首先在Windows机器上运行后端工作正常,但是当我在Linux机器上发布后端时,我在编辑模型时遇到了同样的错误。所以这就是我修复它的方法。首先,模型类以# -*- coding: UTF-8 -*-开头(在第一行!)。在模型中,我重写__unicode__并返回一个unicode字符串。

这可以通过返回unicode(self.name)或我如何使用u'%s' %(self.name)u'Name: %s, Value: %s' %(self.name, self.value)来完成。

如果您return self.name它不起作用,因为它不能确保返回无字符串。

以下是一个完整的例子:

# -*- coding: UTF-8 -*-
import ... # all imports etc. after the coding: UTF-8 line!

class ModelName(models.Model):
    name = models.CharField(max_length=20)

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

希望它有所帮助!

最好的问候,迈克尔

答案 1 :(得分:2)

这在__unicode__的定义中经常出现问题。确保在模型类中定义__unicode__方法,并确保它返回一个unicode字符串。