1

很简单,真的。使用 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

谢谢!

PS 直接运行生成的 SQL 就好了

4

2 回答 2

3

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

这可以通过 returnunicode(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)

希望能帮助到你!

最好的问候,迈克尔

于 2013-12-16T11:27:08.010 回答
2

这通常是__unicode__. 确保在模型类中定义了一个__unicode__方法,并确保它返回一个 unicode 字符串。

于 2013-07-31T06:55:24.487 回答