Avant que vous me pointer tous à here et here le mien un peu différent. J'ai donc commencé à recevoir la fameuse erreur après être passé sur mon serveur de production.Django Filtrage Mises en garde MySQL
django/db/backend/mysql/base.py: 86: Avertissement: Les données tronquées pour la colonne 'limaces' à la ligne 1
La première chose que j'ai été commencer googler cela après je fixe le problème. Pour résoudre ce problème, j'ai modifié les deux modèles pour avoir une max_length de 128 ad puis mis à jour les tables SQL pour le faire correspondre. Mais le problème a persisté .. Un peu confiant que j'ai réellement résolu le problème, j'ai pensé que je ferais aussi bien commencer à les filtrer. Donc, en haut de mon script, j'ai placé ceci.
# Get rid of the MySQLdb warnings
import warnings
import MySQLdb
with warnings.catch_warnings():
warnings.filterwarnings("ignore", category=MySQLdb.Warning)
Et j'ai heureusement poussé cela à la production. Devinez quoi - vous l'avez deviné, le problème est resté. Et maintenant. Je perds rapidement confiance que j'ai effectivement résolu le problème mais une double vérification montre que toutes les colonnes slug ont 128 caractères. En outre, j'ai enveloppé sluggify à l'erreur si elle est plus longue que 128 et toujours rien. Donc, 2 questions:
Comment puis-je clouer quelle opération faiblit cela. c'est-à-dire où dans mon code le drapeau est-il levé?
Comment les filtrer? Ma solution ne fonctionne pas? Est-ce vraiment un avertissement MySQLdb ou un avertissement django.db.mysql.base?
Merci et joyeux piratage de Django!
Pour ceux qui ont des questions sur la structure ..
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;
Et le models.py pertinent.
slug = models.SlugField(max_length=128, editable=False, unique=True)
espoir qui aide ..
sont le champ (s) ces données peuvent provenir ont des limites de texte imposé? –
Non - Je suis en train de régler le slug sur save. Je pousse un avertissement si la longueur est> 128 (mais ce n'est pas ..). – rh0dium
Pouvez-vous poster la sortie de 'describe' de votre table (de la boîte de production) et le modèle que vous utilisez? –