2015-02-15 16 views
6

Ho aggiunto un campo 'nearbyzips' al mio modello e ora non riesco a superare questi errori. Questi sono i passi che ho preso.Come risolvere "Errore di programmazione: la colonna non esiste" dopo aver aggiunto il campo modello

manage.py sqlclear accounts 

manage.py syncdb 

ricevo errori di questi due comandi, ma non appena eseguito CHECK_PERMISSIONS manage.py, ottengo:

ProgrammingError: column accounts.my_profile.nearbyzips" does not exist 

Ho anche installato Sud (anche se io non voglio usarlo) per disperazione e ha seguito il tutorial per la conversione di un progetto esistente per l'utilizzo del sud. Anche questo non ha funzionato, quindi rimuovo il sud dalle app installate e ho eliminato la cartella migrazioni nella mia cartella degli account.

La mia conoscenza degli account 'manage.py sqlclear' è che cancellerà la tabella del database attuale e Syncdb la ricostruirà. Questo non sembra fare quello che dovrebbe fare altrimenti, rimuoverebbe l'errore che assumerei. Tutto quello che ho fatto è stato aggiungere un campo modello, questo non dovrebbe essere così difficile.

Qualcuno ha qualche altro consiglio? Ho letto innumerevoli post di overflow dello stack su questo argomento e l'unica vera soluzione che sto leggendo è quella di usare sqlclear, cosa che ho fatto, quindi sono preoccupato di aver trovato un punto morto nella risoluzione del problema.

+2

sync db non aggiungere colonne - syncdb creerà solo/drop intere tabelle. Hai aggiunto una colonna di cui hai bisogno per aggiungere te stesso. Se vuoi che il Django lo faccia per te, devi usare il sud o iniziare alle migrazioni di django 1,7. – haki

risposta

5

manage.py sqlclear stampa gli operatori SQL ma non li esegue. Per vera goccia di tavoli della app è necessario eseguire queste gocce:

python manage.py sqlclear accounts | python manage.py dbshell 

per aggiungere la colonna senza far cadere le tabelle è possibile eseguire sql di comando e quindi copiare la definizione del campo al ALTER TABLE dell'operatore:

echo "ALTER TABLE accounts_my_profile ADD COLUMN nearbyzips CHAR(100);" | python manage.py dbshell 
+0

aggiungendo il carattere | python manage.py dbshell finalmente l'ha fatto. Grazie. – stephan

+0

Lodi per questa risposta! Ogni altra risposta che ho trovato su questo voleva fare cose spaventose al database. Lo sviluppo con Django è stato così bello fino a quando non ho provato ad aggiungere la prima chiave straniera e poi ha iniziato a lamentarsi delle migrazioni di fantasmi anche nel codice. Grazie a @catavaran. :) – Mikeumus

1

ho risolto, Se qualcuno ha lo stesso problema:

  1. è necessario ripristinare completamente il database Heroku con heroku pg:reset DATABASE_URL

  2. fare heroku run python manage.py syncdb

  3. fare heroku run python manage.py migrate

Problemi correlati