2015-11-12 22 views
13

Python 3, Django 1.8.5, PostgresDjango Migrazione Errore: colonna non esiste

Ho un modello che è stato Sites funzionando benissimo. Recentemente ho provato ad aggiungere un campo, airport_code e a migrare i dati.

class Site(BaseModel): 

    objects = SiteManager() 

    name = models.CharField(max_length=200, unique=True) 
    domain = models.CharField(max_length=200, unique=True) 
    weather = models.CharField(max_length=10) 
    nearby_sites = models.ManyToManyField('self', symmetrical=False, blank=True) 
    users = models.ManyToManyField(settings.AUTH_USER_MODEL, blank=True) 
    facebook = models.URLField(max_length=200) 
    twitter = models.URLField(max_length=200) 
    header_override = models.TextField(blank=True) 
    email_header_override = models.TextField(blank=True) 
    timely_site_tag_id = models.IntegerField() 
    timely_featured_tag_id = models.IntegerField() 
    timely_domain = models.CharField(max_length=255) 
    sitemap_public_id = models.CharField(max_length=255) 
    state = models.CharField(max_length=24) 
    airport_code = JSONField() 

Tuttavia, quando mi sono imbattuto makemigrations ho ottenuto un errore:

django.db.utils.ProgrammingError: column sites_site.airport_code does not exist LINE 1: ..._site"."sitemap_public_id", "sites_site"."state", "sites_sit...

Naturalmente, questo non ha senso, perché la colonna, ovviamente, non esiste quando sto cercando di creala all'interno della migrazione.

Ho visto molte domande su questo errore su Stack Overflow che non hanno ricevuto risposta o una soluzione per creare manualmente il file di migrazione o distruggere e ricostruire il database. Questa non è una soluzione a posto.

risposta

6

Questo errore è stato risolto per me commentando la barra degli strumenti di debug di django da INSTALLED_APPS in settings.py. Non sono sicuro del motivo per cui la barra degli strumenti di debug è il colpevole, ma dopo averlo commentato, sono stato in grado di eseguire makemigrations e migrate senza alcun problema.

Sperando che questo aiuti qualcuno, ho passato dodici ore a cercare di capirlo.

+4

questo sta accadendo anche per me, ma purtroppo, non sto usando il Django Toolbar. Non sai come procedere ... –

+0

Commentando Django Toolbar ha funzionato anche per me. Il mio database è SQLite. – JimInCO

6

Dopo aver eseguito le makemigrations, assicurarsi di eseguire la traccia di stack per gradi.

Nel mio caso, ho notato che veniva tracciato attraverso una chiamata a un modulo contenuto all'interno di un forms.py in un'app completamente diversa, che è successo per avere una chiamata al modello che stavo cercando di creare una nuova migrazione per.

Lo spostamento della classe Form da forms.py nel file views.py ha risolto il problema.

-1

Eseguire questo problema dopo la migrazione del database postgres su un server diverso. In qualche modo ho incasinato il database e non ho potuto aggiornare il mio modello con la nuova classe UserProfile.

ho risolto il problema creando migrazione iniziale per lo schema esistente:

  1. Vuotare il django_migrations tavolo: delete from django_migrations; con un comando DELETE FROM django_migrations WHERE app='my_app';
  2. Per ogni applicazione, eliminare la relativa cartella migrations: rm -rf <app>/migrations/
  3. Ripristinare le migrazioni per le app "built-in": python manage.py migrate --fake
  4. Per ogni esecuzione di app: python manage.py makemigrations <app>. Prenditi cura delle dipendenze (i modelli con ForeignKey dovrebbero essere eseguiti dopo il loro modello principale).
  5. Infine: python manage.py migrate --fake-initial

Got qui: https://stackoverflow.com/a/29898483

PS Io non sono sicuro che questo è stato rilevante per la risoluzione del problema, ma, in primo luogo, ho lasciato cadere la tabella in PostgreSQL che ha causato un errore e ha commentato la classe UserProfile nei modelli.

in guscio:

sudo -su postgres 
psql databse_name 
DROP TABLE table_name; 

models.py:

#class UserProfile(models.Model): 
    #user = models.OneToOneField(settings.AUTH_USER_MODEL, unique=True, primary_key=True, on_delete=models.CASCADE, related_name='user_profile') 
    #avatar = ThumbnailerImageField(upload_to='profile_images', blank=True) 
    #country = models.CharField(max_length = 128) 
Problemi correlati