Django在添加时管理UnicodeDecodeError

Axe*_*xel 4 django encoding utf-8

在django界面中添加元素时遇到问题.我有两个定义:

# -*- coding: utf-8 -*-
class VisitType(models.Model):
    name=models.CharField(max_length=50,db_index=True,verbose_name="Nombre del tipo de visita")
    is_basal=models.BooleanField(default=False,verbose_name="Es basal")

    def __unicode__(self):
        if self.is_basal:
            s="%s [BASAL]" % (self.name)
        else:
            s="%s" % (self.name)
        return s

class Visit(models.Model):
    type=models.ForeignKey(VisitType,null=True,on_delete=models.SET(VisitType.get_sentinel_visit_type),db_index=False,verbose_name="Tipo de visita")

    def __unicode__(self):
        return "Tipo de visita %s" % (self.type)
Run Code Online (Sandbox Code Playgroud)

在管理站点中添加VisitType对象时,没有问题. adding_VisitType

但是,在admin中添加访问时: adding_Visit

我得到带有这个提示的UnicodeDecodeError:"无法编码/解码的字符串是Analtica"(注意我在表单中使用了"Analítica"访问类型.

我正在使用django 1.5.1,MySQL-python 1.2.4.

MySQL正在使用带有utf8_general_ci排序规则的表.

该数据库是MySQL 5.5.30.

问候.

Dan*_*man 10

你的两个__unicode__方法都没有返回unicode字符串.它们都返回字节串.这是灾难的秘诀.特别是在这些函数中,你将unicode插入到字节字符串中.

改为:

def __unicode__(self):
    if self.is_basal:
        s = u"%s [BASAL]" % (self.name)
    else:
        s = self.name
    return s
Run Code Online (Sandbox Code Playgroud)

和:

return u"Tipo de visita %s" % (self.type)
Run Code Online (Sandbox Code Playgroud)