Django - DatabaseError: es gibt Keine Tabelle
Definierte ich zwei Modelle:
class Server(models.Model):
owners = models.ManyToManyField('Person')
class Person(models.Model):
name = models.CharField(max_length=50)
admin.site.register(Server)
admin.site.register(Person)
Danach habe ich auch überprüft die sql-just for fun:
BEGIN;
CREATE TABLE "servers_server_owners" (
"id" integer NOT NULL PRIMARY KEY,
"server_id" integer NOT NULL,
"person_id" integer NOT NULL,
UNIQUE ("server_id", "person_id")
)
;
CREATE TABLE "servers_server" (
"id" integer NOT NULL PRIMARY KEY,
"name" varchar(50) NOT NULL,
"port" integer unsigned NOT NULL,
"state" integer NOT NULL
)
;
CREATE TABLE "servers_person" (
"id" integer NOT NULL PRIMARY KEY,
"name" varchar(50) NOT NULL
)
;
COMMIT;
Gibt es auch, sagt CREATE TABLE "servers_server_owners"
Lief ich syncdb
installieren Sie die neuen Modelle in die Datenbank. Ich ging auf das admin-interface zu definieren, einige Objekte mit zu spielen, aber ich bekam die folgende Fehlermeldung:
DatabaseError at /admin/servers/server/1/
no such table: servers_server_owners
Ich Herunterfahren der dev-server, lief syncdb
wieder der server gestartet: immer Noch dasselbe problem. Warum kann Sie nicht finden, den Tisch, obwohl es mir gerade gesagt, es erzeugte id?
Entweder haben Sie die fehlenden Informationen in die oben genannten, oder dein Beispiel ist falsch. Die Standard-Zwischentabelle sollte "servers_server_person" es sei denn, man definiert die Zwischentabelle mit "durch"
Ich habe nicht verwendet
Der richtige Weg, um Ihre eigene Frage zu beantworten auf, SO ist zu poste es als Antwort und es akzeptieren, nicht Bearbeiten Sie Ihre ursprüngliche Frage. Herzlich willkommen auf Stack Overflow!
Ja, ich weiß und schon ausprobiert. Es geschieht nur zu einem 8-stündigen Verzögerung, bevor die Menschen unter 100 Ruf kann beantworten Ihrer eigenen Fragen. Ich habe nur editiert, um andere zu retten, die diese Frage die Schwierigkeiten der Versuch einer Antwort auf diese, bis ich post die Antwort. Sechs Stunden zu gehen.
Ich habe nicht verwendet
through
, und ich dachte auch an die gleiche Sache, als ich sah, sql. Es scheint zu sein, Kommissionierung bis auf den Namen der propertyDer richtige Weg, um Ihre eigene Frage zu beantworten auf, SO ist zu poste es als Antwort und es akzeptieren, nicht Bearbeiten Sie Ihre ursprüngliche Frage. Herzlich willkommen auf Stack Overflow!
Ja, ich weiß und schon ausprobiert. Es geschieht nur zu einem 8-stündigen Verzögerung, bevor die Menschen unter 100 Ruf kann beantworten Ihrer eigenen Fragen. Ich habe nur editiert, um andere zu retten, die diese Frage die Schwierigkeiten der Versuch einer Antwort auf diese, bis ich post die Antwort. Sechs Stunden zu gehen.
python manage.py migrate
lösen das Problem für michInformationsquelleAutor varesa | 2012-04-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Als Tipp für die Zukunft, Blick in Süd, ein sehr nützliches Dienstprogramm für die Anwendung Ihres Modells änderungen an der Datenbank, ohne eine neue Datenbank erstellen jedes mal, wenn Sie geändert haben das Modell(s).
Damit können Sie sehr einfach:
python manage.py migrate app_name
- und Süd-schreiben Sie Ihr Modell ändert.Die Dokumentation ist ziemlich einfach.
InformationsquelleAutor droidballoon
Eigentlich das problem war, dass der Tisch wurde nie erstellt. Da ich ziemlich neu bin mit django, ich wusste nicht, dass
./manage.py syncdb
keine Aktualisierung bestehender Modelle, sondern schafft nur diejenigen, die es nicht gibt.Da das Modell "Server" existierte, bevor ich noch die anderen Modell, und es war bereits in der db, 'syncdb" nicht wirklich erstellen der neuen Tabellen.
Es gibt mehrere Möglichkeiten, die einfachste ist löschen und neu erstellen der Datenbank. Eine anspruchsvollere Methode ist die Verwendung eines "Migrations-tool". Um die Zeit, die ich fragte die Frage, die Sie hatten, um ein externes tool wie Süd, aber ich glaube ein ähnliches tool integriert ist django. Sehen
droidballoon
's Antwort für die ältere Lösung undMichael
's Antwort für die neueInformationsquelleAutor varesa
Ich das gleiche problem heute und es beheben.
Ich denke, Sie vermissen einen Befehl in tutorial 1.
nur tun, Folgen Sie:
dann das lösen und gewinnen der Tabelle abfragt, und Sie können finden Sie in der Tabelle erstellt.
Lesen Sie die
manage.py makemigrations
Befehl.InformationsquelleAutor Michael
für django 1.9, das ist, was ich Tat, und es löste das Problem.
InformationsquelleAutor Annie
Schritt 1:
Ergebnis 1:
Schritt 2:
Ergebnis 2:
schließlich runserver. Getan
InformationsquelleAutor ChineseAnt