在Django中声明DB字段时,在verbose_name参数中使用非ascii字符串

时间:2009-01-23 23:36:32

标签: python django unicode

我宣布:

#This file is using encoding:utf-8
...
class Buddy(models.Model):
    name=models.CharField('ФИО',max_length=200)
    ...

...在models.py中。 manage.py syncdb运行顺畅。然而,当我去管理界面并尝试添加一个新的Buddy时,我抓住了一个DjangoUnicodeDecodeError,它说:“'utf8'编解码器无法解码位置0-1中的字节:无效数据。你传入'\ xd4 \ xc8 \ xce'(< type'str'< r;)“。

我正在使用sqlite3,因此所有字符串都存储为utf8编码的字节串。 Django的编码也是utf8。看到django关于这个主题的文档,不知道。

UPD:最终我发现了问题所在。结果是我用ANSI编码保存了我的源代码。

解决方案:我使用UTF-8保存了源代码,它创造了奇迹。

1 个答案:

答案 0 :(得分:5)

首先,我会将您的描述明确定义为Unicode字符串:

class Buddy(models.Model):
    name=models.CharField(u'ФИО',max_len)

请注意u'ФИО'中的“u”。

其次,您的模型上是否定义了__unicode__()函数?如果是这样,请确保它返回Unicode字符串。当Admin界面尝试访问模型的unicode表示时,很可能会出现此错误,而不是在将其添加到数据库时。如果您从__unicode__()返回非unicode字符串,则可能会导致此问题。