ich benutze Django und MySQL mit InnoDB.
In einer Tabelle `user` gibt es ein Feld `promoter_id`, welches wieder auf `user`verweist. Im Modell steht:
Code: Alles auswählen
promoter = models.ForeignKey('self', blank=True, null=True, default=None)
Löscht man aktuell einen Benutzerdatensatz über die Admin-Oberfläche, so wird man gefragt, ob die Datensätze, die den aktuellen referenzieren, mit gelöscht werden sollen. Dies passiert auch, wenn man per SQL den Constraint auf der `user`-Tabelle in der DB löscht.
Löscht man den gleichen Benutzerdatensatz über die Shell, so werden die abhängigen User stillschweigend mit gelöscht. Die Logik steckt also im Modell.
Statt dessen möchte ich aber, dass die Datensätze, die den aktuellen referenzieren, erhalten bleiben und `promoter_id` auf NULL gesetzt wird.
Zusätzlich möchte ich, dass Löschvorgänge Exceptions werfen, wenn Abhängigkeiten bestehen, anstatt diese still mit zu löschen.
Ist so etwas möglich und wie geht das? Die Django-Doku schweigt sich leider über das Thema „Referentielle Integrität“ aus.
Danke und Grüße,
Olaf
P.S.: Ich kann natürlich immer noch aus dem Feld ein Integer machen und die gesamte Logik selbst schreiben. Ich hoffe aber auf eine bessere Lösung.