Wenn ich ein Objekt in der Admin-Oberfläche lösche, möchte ich das Entfernen verwandter Objekte verhindern.Django: Wie man Admin die relativen Objekte nicht löschen lässt?
class ObjectToDelete(models.Model):
timestamp = models.DateTimeField()
class RelatedObject(models.Model):
otd = models.ForeignKey('app.ObjectToDelete', null=True, blank=True)
Da die ForeignKey
in RelatedObject
NULL-Werte zulässt, sollte ich in der Lage sein, es zu None
zu setzen, anstatt das gesamte Objekt zu löschen. Und das ist genau das Verhalten, das ich haben möchte.
Ich weiß, dass ich benutzerdefinierte Löschaktionen für diese Admin-Oberfläche erstellen kann.
Und ich bin mir auch bewusst, dass ich in ObjectToDelete
machen könnte, die auch Entfernung von RelatedObject
verhindern würde. Aber dann hätte ich nicht die Eins-zu-Viele-Beziehung, die ich möchte.
Gibt es einen einfachen Weg, dies zu erreichen?
Es könnte besser sein, ['SET_NULL'] (https://docs.djangoproject.com/en/1.9/ref /models/fields/#django.db.models.SET_NULL) für Ihr Beispiel anstelle von 'CASCADE', da das OP nicht möchte, dass das zugehörige Objekt gelöscht wird. – Alasdair
@Alasdair, ja du hast Recht, wir können hier SET_NULL verwenden. Aber in Bezug auf die Leistung sind beide auf der Datenbankebene, kann nicht mit Sicherheit sagen, wer schneller ist. –
Es geht nicht darum, was schneller ist. Die Verwendung von 'models.CASCADE' (das Standardverhalten bis Django 2.0) löscht die zugehörigen Objekte. Genau das versucht das OP zu vermeiden. – Alasdair