Django admin - Instanz muss einen Primärschlüsselwert haben, bevor eine Viele-zu-Viele-Beziehung verwendet werden kann

8

bearbeiten: Ich war vorher nicht klar, ich speichere mein Objekt im django Admin-Panel, nicht in einer Ansicht. Auch wenn ich das Objekt ohne viele-zu-viele-Beziehungen speichere, bekomme ich immer noch den Fehler.

Ich habe ein Modell namens TogglDetails , das eine ForeignKey -Beziehung mit dem Standardmodell django User und eine MayToManyField -Beziehung mit einem Modell namens Tag hat. Ich habe meine Modelle mit django admin registriert, aber wenn ich versuche, eine TogglDetails -Instanz zu speichern, erhalte ich den Fehler im Titel.

Hier sind meine Modelle:

%Vor%

Soweit ich das beurteilen kann, sollte es keine Probleme mit meinen Modellen geben und django admin sollte die Instanz einfach ohne Probleme speichern. Gibt es etwas Offensichtliches, das ich vermisst habe?

Ich benutze Django 1.3

    
Iain Shelvington 20.06.2011, 14:40
quelle

5 Antworten

4

Die Antwort auf meine Frage lautete: Postgres-Sequenzen ohne Attribut 'Owned by' geben in Django 1.3 keine ID zurück

Die Sequenzen in meiner Postgres-Datenbank enthielten nicht das Attribut "Owned by" und gaben daher keine ID zurück, wenn ein neuer Eintrag in der Datenbank gespeichert wurde.

    
Iain Shelvington 26.08.2011, 14:20
quelle
3

Wie von anderen Benutzern angegeben:

Postgres-Sequenzen ohne 'Eigentum von' Attribut geben keine ID in Django 1.3 zurück

Für die Sequenzen in meiner postgres-Datenbank wurde das Attribut "Owned by" nicht festgelegt und daher wurde keine ID zurückgegeben, wenn ein neuer Eintrag in der Datenbank gespeichert wurde

Zusätzlich: Dies wird höchstwahrscheinlich durch eine inkompatible Änderung verursacht, die einige primäre Schlüsseltypen in benutzerdefinierten Modellen für Django 1.3 außer Reichweite bringt. Siehe Django trac Tickets Ссылка und Ссылка für weitere Informationen.

Ich habe das Problem gelöst, indem ich die folgenden Befehle für die betroffenen Tabellen / Sequenzen ausgeführt habe.

Insbesondere den Befehl ausführen:

%Vor%

table_name_colname_seq und tablename.colname ändern

    
Nathan Keller 07.11.2011 16:24
quelle
0

Lassen Sie uns die Frage nicht erraten und fügen Sie die Fehlermeldung hinzu. Dies gibt die meisten Informationen darüber, wo sie fehlgeschlagen ist.

Haben Sie das Benutzermodell importiert?

%Vor%     
fijter 20.06.2011 15:28
quelle
0

Ich hatte dieses Problem auch und das einzige, was ich tun konnte, war, die M2M-Felder leer zu machen und sie erst zu setzen, wenn ich auf "Speichern und weiter bearbeiten" klicke.

Ich denke, das kann nur ein Frameworkwarts sein, da Sie bemerken werden, dass der Benutzerbereich der Admin-Site ebenfalls sehr streng ist "Sie können diese Felder nur bearbeiten, bis Sie das Modell speichern".

Daher empfehle ich, dieses Schema zu übernehmen und das M2M-Formularfeld auszublenden, bis das Modell einen Primärschlüssel hat.

    
M. Ryan 31.08.2011 16:25
quelle
0

Ich habe versucht Django 1.3 mit CPython, mit verschiedenen Datenbank-Setups. Ich kopierte die Modelle aus der Frage und nahm einige Änderungen vor: Zuerst fügte ich

hinzu %Vor%

am Anfang der Datei und ich habe den Verweis auf Tag zwischen Anführungszeichen gesetzt. Das sollte keinen Unterschied machen. Außerdem habe ich das folgende admin.py erstellt:

%Vor%

Für Sqlite3 tritt das beschriebene Problem nicht auf, weder für MySQL. Also habe ich PostgreSQL mit dem postgresql_psycopg2 Backend ausprobiert. Dasselbe: Ich kann den Fehler nicht reproduzieren.

Soweit ich das beurteilen kann, ist der Code in der Frage nicht falsch. Das Problem muss woanders liegen.

    
pvoosten 31.08.2011 20:54
quelle

Tags und Links