简单,真的。 使用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可以正常工作
答案 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字符串。