【发布时间】:2010-08-04 19:50:29
【问题描述】:
在你们都指出我之前here 和here 我有点不同。因此,在转移到生产服务器后,我开始遇到著名的错误。
django/db/backends/mysql/base.py:86:警告:第 1 行“slug”列的数据被截断
我做的第一件事是在解决问题后开始在谷歌上搜索。为了解决这个问题,我调整了两个模型的 max_length 为 128 ad,然后更新了 SQL 表以匹配它。 但问题仍然存在.. 对我确实解决了问题有点信心,我想我也可以开始过滤掉它们。所以我把它放在了脚本的顶部。
# Get rid of the MySQLdb warnings
import warnings
import MySQLdb
with warnings.catch_warnings():
warnings.filterwarnings("ignore", category=MySQLdb.Warning)
我很高兴将其推向生产。你猜怎么着——你猜对了,问题仍然存在。那么现在怎么办。我很快就失去了我确实解决了问题的信心,但仔细检查表明所有 slug 列都是 128 个字符长。此外,如果它长于 128 并且仍然没有,我将 sluggify 包装为错误。所以2个问题:
我怎样才能确定什么操作 正在标记这个。即在我的哪里 代码是升旗了吗?
我怎样才能真正过滤掉这些?我的修复不起作用?这真的是 MySQLdb 警告还是 django.db.mysql.base 警告?
感谢和愉快的 Django 黑客攻击!
对于那些对结构有疑问的人..
CREATE TABLE `people_employee` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(100) DEFAULT NULL,
`email` varchar(75) DEFAULT NULL,
`location_id` varchar(100) DEFAULT NULL,
`jpeg` longtext,
`first_name` varchar(100) DEFAULT NULL,
`last_name` varchar(100) DEFAULT NULL,
`maildomain` varchar(32) DEFAULT NULL,
`mailserver` varchar(32) DEFAULT NULL,
`mailfile` varchar(64) DEFAULT NULL,
`contractor` tinyint(1) NOT NULL,
`temporary` tinyint(1) NOT NULL,
`formal_name` varchar(100) DEFAULT NULL,
`nickname` varchar(32) DEFAULT NULL,
`cell_phone` varchar(32) DEFAULT NULL,
`office_phone` varchar(32) DEFAULT NULL,
`other_phone` varchar(32) DEFAULT NULL,
`fax` varchar(32) DEFAULT NULL,
`assistant_id` int(11) DEFAULT NULL,
`supervisor_id` int(11) DEFAULT NULL,
`is_supervisor` tinyint(1) NOT NULL,
`department_id` varchar(100) DEFAULT NULL,
`division_id` varchar(100) DEFAULT NULL,
`section_id` varchar(100) DEFAULT NULL,
`job_classification_id` varchar(100) DEFAULT NULL,
`functional_area_id` varchar(100) DEFAULT NULL,
`position_id` varchar(100) DEFAULT NULL,
`notes_url` varchar(200) DEFAULT NULL,
`ldap_active` tinyint(1) NOT NULL,
`notes_active` tinyint(1) NOT NULL,
`created_at` datetime NOT NULL,
`last_update` datetime NOT NULL,
`is_active` tinyint(1) NOT NULL,
`site_id` int(11) NOT NULL,
`slug` varchar(128) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `slug` (`slug`),
KEY `people_employee_location_id` (`location_id`),
KEY `people_employee_assistant_id` (`assistant_id`),
KEY `people_employee_supervisor_id` (`supervisor_id`),
KEY `people_employee_department_id` (`department_id`),
KEY `people_employee_division_id` (`division_id`),
KEY `people_employee_section_id` (`section_id`),
KEY `people_employee_job_classification_id` (`job_classification_id`),
KEY `people_employee_functional_area_id` (`functional_area_id`),
KEY `people_employee_position_id` (`position_id`),
KEY `people_employee_site_id` (`site_id`)
) ENGINE=MyISAM AUTO_INCREMENT=1429 DEFAULT CHARSET=latin1;
以及相关的models.py。
slug = models.SlugField(max_length=128, editable=False, unique=True)
希望对您有所帮助..
【问题讨论】:
-
此数据可能来自的字段是否有文本限制?
-
否 - 我在保存时设置 slug。如果长度> 128(但不是......),我会发出警告。
-
你能把你表的
describe(来自生产箱)的输出和你正在使用的模型贴出来吗? -
您能否将查询粘贴到生成警告消息的位置?
标签: python django django-models