Django admin 更新记录时崩溃,但插入新记录正常

1 投票
4 回答
2120 浏览
提问于 2025-04-16 15:35

我遇到了一个奇怪的问题:

这是我的技术信息,开发环境是这样的(生产环境会用linux/apache/Mysql):

macosx 2.6.6

python 2.6.1

django 1.3

mysql 5.1

我用MySQLdb来连接python和MySQL……

我刚接触django,大家从我之前的问题就能看出来……但我需要快速掌握它,因为我需要用它开发一个大型系统。

现在的问题是,对我来说,学习的过程并不是那么顺利……

好吧,进入正题。我正在做django的教程(不是为了好玩,我真的需要快速学习,因为我需要用它开发一个庞大的系统)。

到目前为止,我完成了所有的教程,正好到了添加管理员的阶段。

当我尝试编辑投票记录时(如果有人知道django 1.3的教程),网站崩溃了,出现了以下异常:

警告在 /admin/polls/poll/2/ 字符串值不正确:'\xD7\xA9\xD7\x95\xD7\xA0...',在第1行的'change_message'列

在同一张表中添加新记录没有问题,只是编辑时出错……

如果有人知道这方面的事情……

# Create your models here.

class Poll(models.Model): question = models.CharField(max_length=200) pub_date = models.DateTimeField('发布日期')

def __unicode__(self):
    return self.question

def was_published_today(self):
    return self.pub_date.date() == datetime.date.today()

这是我的模型,另外我看到我的MySQL数据库是latin1而不是UTF-8……python是unicode……也许这就是问题所在……

但我还是搞不明白为什么我可以添加记录却不能编辑它们……这不是很奇怪吗?

4 个回答

1

打开你的mysql命令行工具,然后运行下面的命令:

mysql> show variables like  'character\_set\_%';

上面有没有出现utf8的值呢?

如果你觉得这是mysql的问题,可以把你的数据库设置换成sqlite3:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': 'database.sqlite3',           
        'USER': '',                      
        'PASSWORD': '',                  
        'HOST': '',                     
        'PORT': '',                   
    }
}

同步一下,然后再试着输入一些数据。

4

我之前也遇到过同样的问题,不过我是用的Django 1.4版本。我参考了photoionized的建议,但做了一些调整以适应这个版本(在这个版本中,auth_message不见了,但你可以在django_admin_log中找到change_message)。所以:

ALTER TABLE django_admin_log CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
1

听起来像是数据库的字符集问题。你能检查一下你数据库中auth_message表的默认字符集吗?

如果你的表不能处理utf8字符,就会出现这个错误。

撰写回答