2012-01-13 2 views
12

Ho un progetto Django che è iniziato come importazione di un database legacy. Per questo motivo, esiste un modello con una chiave primaria composita. Questo ha funzionato fintanto che usavo solo i dati legacy, ma ora voglio aggiungere nuovi dati e il modulo che ho creato mi sta dicendo che sto cercando di inserire dati duplicati, presumibilmente perché sta guardando solo uno dei campi come chiave primaria.Aggiunta del campo Autoincrement al modello esistente con Django South?

Ora voglio cambiare il modello per usare una chiave primaria autoincrementata, come se Django aggiungesse automaticamente. Ho provato a rimuovere gli attributi chiave primaria dai campi e metterli in unique_together nella classe Meta interna. Quando ho eseguito schemamigration con South, si desidera aggiungere un campo id come previsto, ma ha richiesto un valore predefinito.

Come specificare che South deve assegnare chiavi univoche in un modo ragionevole per un campo di incremento automatico? (ad esempio, assegna la sequenza [1 ... n] ad un ordinamento arbitrario dei record)

Se questo è impossibile c'è un altro modo per realizzare la stessa cosa, preferibilmente utilizzando Django e Sud?

risposta

5

ho risolto il problema che mi ha richiesto di fare questo con una soluzione alternativa:

ho copiato i dati dalla tabella originale in una tabella temporanea in SQL con INSERT INTO... SELECT.... Ho quindi eliminato la tabella originale e l'ho ricreata con il campo autoincrement. Quindi ho copiato i dati nella nuova tabella, con i valori di autoincremento aggiunti automaticamente dal comando INSERT. Alla fine ho eseguito una falsa corsa della migrazione Sud per rendere le tabelle di South coerenti con il nuovo schema.