2017-06-28 7 views
3

ich eine neue Imagefield in meinem models.py hinzugefügt:Django erstellt keine Imagefield auf Postgres

class User(AbstractUser): 
    [more_fields_here] 
    profile_picture = models.ImageField(upload_to='profile_pictures', null=True) 

Ich lief python manage.py makemigrations und dann python manage.py migrate ohne Fehler.

Aber wenn ich meine Anwendung ausführen ich erhalte:

ProgrammingError at column authentication_user.profile_picture does not exist 

checkte ich in der Postgres-Datenbank und die Spalte profile_picture nicht vorhanden.

Ich löschte die Migrationen und versuchte es erneut, aber ich bekomme immer noch den gleichen Fehler.

Im migrations/0001_initial.py gibt es die Zeile:

('profile_picture', models.ImageField(null=True, upload_to='profile_pictures')), 

Aber warum die Spalte nicht gibt es in der Tabelle?

+1

Haben Sie vielleicht Ihre Migrationsdatei manuell geändert? ? Ich vermute, dass Django denkt, dass '0001_initial' bereits migriert wurde und deshalb dieses Feld nicht hinzufügt. Ich würde auch vorschlagen, 'python manage.py migrieren 'zu versuchen, um alle Migrationen rückgängig zu machen und dann' python manage.py migrate 'erneut auszuführen. – Kamil

+0

Haben Sie [AUTH_USER_MODEL'] (https://docs.djangoproject.com/de/1.11/ref/settings/#std:setting-AUTH_USER_MODEL) für Ihr benutzerdefiniertes Benutzermodell festgelegt? Sehen Sie die '[more_fields_here]' Felder in der Datenbank? – Chris

+0

@Chris, ich kann bestätigen, dass ich das '' AUTH_USER_MODEL'' eingestellt habe. Alle anderen Felder sind wie erwartet in der Datenbank enthalten. Das Problem besteht nur bei diesem Feld. – Galil

Antwort

1

Es sieht so aus, als ob es etwas mit Migrationen zu tun hat, es wird nicht empfohlen, Migrationsdateien manuell zu ändern. Django speichert Informationen, welche Migrationen bereits angewendet wurden, wenn Sie die bereits angewendete 0001 Migration ändern und migrate erneut ausführen, werden diese Änderungen nicht übernommen. Natürlich weiß ich nicht, ob das genau was mit dir passiert ist, aber es sieht so aus als ob profile_picture Feld hinzugefügt wurde, nachdem 0001 angewendet wurde.

Der einfachste Weg, dies zu beheben (ohne Migrationen rollbacking):

  1. entfernen Feld profile_picture von 0001 Migration
  2. Lauf makemigrations wieder (0002 mit neuem Feld profile_picture erstellt werden soll)
  3. Lauf migrate
Verwandte Themen