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
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.
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
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.
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:
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.
Tags und Links django django-admin