Ich habe ein Problem mit Django Framework. Ich habe ein Modell geändert und Folgendes eingefügt:

masterweb_link = models.CharField(_('masterweb_link'), help_text=_('link to MasterWeb tour'), max_length=300, null = True, blank = True)

Danach war ich das: - python manage.py syncdb

Und db_application wurde geändert und jetzt kann ich mit einer neuen Spalte im Admin-Bereich arbeiten. Auf meinem lokalen PC ist alles in Ordnung, als ich versuchte, es zu überprüfen.

Wenn ich dies jedoch auf dem Host versuche, ändern sich nach all meinen Aktionen auch das Modell und die Datenbank, aber auf der Django-Verwaltungssite wird keine neue Spalte angezeigt.

Ich habe keine Fehler, wenn ich alle meine Aktionen mache! Bitte helfen Sie.

1
chuve 8 Okt. 2012 im 21:00

3 Antworten

Beste Antwort

Wie Daniel Roseman erwähnte, ändert syncdb keine vorhandenen Tabellen.

Dazu müssen Sie south http://south.aeracode.org/ verwenden

Ein sehr kurzer Überblick zum Konvertieren Ihrer vorhandenen Anwendung in south. Zuerst können Sie es mit easy_install installieren, indem Sie easy_install South eingeben. Wenn Sie es von Mercurial oder von einem Snapshot tar.gz installieren möchten, erhalten Sie Anweisungen <> hier.

Nach der Installation müssen Sie Ihre vorhandene Anwendung für die Verwendung von south konvertieren. Fügen Sie in der settings.py - Datei Ihrer Anwendung south zu INSTALLED_APPS hinzu und führen Sie dann python manage.py syncdb erneut aus. Dazu werden lediglich Datentabellen für die Anwendung south hinzugefügt. Es macht noch nichts mit Ihrem Modell.

Jetzt möchten Sie die Änderung rückgängig machen, die Sie in Ihrem ursprünglichen Beitrag vorgenommen haben. Geh zurück zu dem, was war. Wir werden diese Änderung in ein paar Minuten vornehmen, aber zuerst müssen wir south mitteilen, wie Ihre Anwendung jetzt aussieht.

python manage.py convert_to_south <appname> Ersetzen Sie <appname> durch den Namen Ihrer Anwendung. Dadurch wird die erste Migrationsdatei für Ihre Anwendung erstellt.

Übernehmen Sie diese Änderungen in Ihre Versionskontrolle (oder verteilen Sie die Anwendung über Ihren normalen Prozess an Ihre anderen Entwickler). Es sollte sich um einen neuen Ordner mit dem Namen migrations in Ihrem Anwendungsverzeichnis handeln. Sie müssen alle Dateien, die in diesem Ordner angezeigt werden, festschreiben / verteilen.

Einmalige Sache : Überall, wo Ihre Anwendung installiert ist, muss dieser Befehl ausgeführt werden, um auch die Verwendung von South zu konvertieren. python manage.py migrate <appname> 0001 --fake Laut der Dokumentation ist dies ist erforderlich, da bei der ersten Migration von convert_to_south versucht wird, alle vorhandenen Tabellen zu erstellen. Stattdessen teilen Sie South mit, dass es bereits mit --fake angewendet wurde, sodass die nächsten Migrationen korrekt angewendet werden.

Jetzt werden wir Ihre Änderung vornehmen. Bearbeiten Sie Ihr Modell erneut, um die gewünschte Änderung vorzunehmen. Speichern Sie das Modell.

Führen Sie diesen Befehl aus: python manage.py schemamigration <appname> --auto. South analysiert Ihre Modelle und deren Änderungen und erstellt ein Migrationsskript. Aus diesem Grund mussten wir Ihre Änderungen auf den ursprünglichen Zustand zurücksetzen. Andernfalls würde south nicht wissen, von was es von der Migration kommt.

Wenn es abgeschlossen ist, führen Sie python manage.py migrate <appname> aus. Übertragen oder verteilen Sie erneut den Ordner migrations. Jeder Standort, an dem dies bereitgestellt wird, muss python manage.py migrate <appname> ausführen.

Wenn Sie in Zukunft Schemaänderungen vornehmen, führen Sie python manage.py schemamigration <appname> --auto aus, um das Migrationsskript zu erstellen, und python manage.py migrate <appname>, um die Änderungen zu installieren.

Ich empfehle auch einen Blick in die Dokumentation für andere Dinge, die south während der Migration verarbeiten kann. Das Obige sollte Ihnen jedoch den Einstieg erleichtern. Die Dokumentation von South befindet sich hier.

1
Andy 8 Okt. 2012 im 18:17

syncdb ändert keine vorhandenen Tabellen.

3
Daniel Roseman 8 Okt. 2012 im 17:01

Überprüfen Sie auch Ihre admin.py-Datei im zweiten Teil des Django-Tutorials Sie codieren es hart.

0
Chris SH 22 Juni 2014 im 20:52