Prima che tutti mi punti a here e here mio un po 'diverso. Così ho iniziato a ricevere il famoso errore dopo aver spostato il mio server di produzione.Django Filtering MySQL Avvisi
Django/db/backend/mysql/base.py: 86: Attenzione: I dati troncati per la colonna 'slug' alla riga 1
La prima cosa che ho fatto è stato iniziare googling questo dopo ho risolto il problema. Per risolvere questo problema, ho ottimizzato entrambi i modelli per avere una lunghezza massima di 128 annunci, quindi ho aggiornato le tabelle SQL per abbinarlo. Ma il problema persisteva .. Abbastanza sicuro di aver effettivamente risolto il problema, ho pensato che avrei anche iniziato a filtrarli. Quindi in cima alla mia sceneggiatura l'ho inserito.
# Get rid of the MySQLdb warnings
import warnings
import MySQLdb
with warnings.catch_warnings():
warnings.filterwarnings("ignore", category=MySQLdb.Warning)
E ho fortunatamente spinto questo alla produzione. Indovina, hai indovinato, il problema è rimasto. E ora. Sto rapidamente perdendo la fiducia che in effetti ho risolto il problema, ma un doppio controllo di ciò mostra che tutte le colonne di slug sono lunghe 128 caratteri. Inoltre ho spostato l'errore a errore se è più lungo di 128 e ancora nulla. Quindi 2 domande:
Come posso inchiodare quale operazione è segnalazione. cioè dove nel mio codice viene issata la bandiera?
Come è possibile filtrarli? La mia correzione non funziona? Si tratta davvero di un avviso MySQLdb o di un avviso django.db.mysql.base?
Grazie e felice hacking di Django!
Per coloro che hanno domande sulla struttura ..
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;
E la models.py rilevante.
slug = models.SlugField(max_length=128, editable=False, unique=True)
Speranza che aiuta ..
sono il campo (s) questi dati possono provenire da hanno limiti di testo imposto? –
No - Sto impostando lo slug al salvataggio. Sto spingendo un avvertimento se la lunghezza è> 128 (ma non è ..). – rh0dium
Puoi pubblicare l'output di 'describe' della tabella (dalla casella di produzione) e il modello che stai utilizzando? –