0

also in etwas mehr Detail habe ich ein Modell mit einem Feld wie: permalink = models.IntegerField(default=0)Wie kann ich Django ORM/SQL-Probleme debuggen? (Frisch Migration gibt Nullwert Fehler, bestehende db Daten gebrochen hat)

Ich habe nicht wirklich dieses Feld wurde mit - aber würde jetzt würde gerne.

Allerdings scheint es alle Modelle auf dieser Tabelle, permalink ist jetzt 57295730 - auf allen 2000 Modellen!

In einem Versuch zu debuggen, versuchte ich komplett wischen die DB, läuft migrate (~ 100 Migrationen) - aber dann eine Instanz des Modells erstellen, mir wurde gesagt permalink violates the not-null constraint, obwohl ich definitiv einen Wert übergeben! Ich bekomme auch eine Liste der Werte, die ich es übergebe, aber bin ich nicht sicher, wie man weiß, welcher Wert/Spalte zu welchem ​​Feld bezieht?

Ich habe sogar DB zu entfernen versucht, Migrationen zu entfernen, eine neue makemigrations läuft - und nach wie vor die Null-Verletzung bekommen ...

noch seltsamer, es sieht aus wie dieses Feld seit der ersten Migration nicht berührt wurde!

migrations$ egrep permalink * 0001_initial.py: ('permalink', models.IntegerField(default=0)), migrations$

Ich bin mit (k) ubuntu 14.04, Postgres 9.3, Python 3.4, django 1.9.4

Obwohl ich würde gerne wissen, wie diese zu beheben - meine Frage ist wirklich: „Was kann Ich tue, um diese Art von Situation zu debuggen? "

+0

auch - kann den Wert von 'permalink' Admin sagt es nicht bearbeiten hat sich verändert, aber es bleibt unverändert. Alle anderen Daten _looks_ OK und _seems_ können ebenfalls bearbeitet werden. – Chozabu

Antwort

0

gut nicht die Antwort, die ich will - aber eine Arbeits Antwort:

  1. tun automatisierte Tests
  2. Verwendung CI! Verhindern, dass dieses Problem in erster Linie

Und wenn Sie nicht tun, um die oben ... Verwendung git bisect (oder, wenn Sie kann manuell git reset --hard HEAD~1, um das Problem zu finden!)

in myCASE, I überwand die Speicherfunktion des Modells auf eine ... dumme Weise!

edit: in etwas genauer, ich permalink einstellen größte Wert auf 1 größer als der Strom - aber in einem früheren begehen, hatte die + 1

jedoch entfernt, ich habe diesen Fehler nicht bemerkt schnell, wie es bei Daten in der DB nicht passiert ist.

Also! Der Fehler war tatsächlich ziemlich informativ - wenn ich meine Tests häufiger durchgeführt hätte (oder CI verwendet hätte), wäre ich sofort über den Fehler informiert worden und hätte mir ziemlich Kopfschmerzen erspart!

so, kurz: ** Schreibtests, führen sie - automatisch **