Nun, ich benutze Django 1.6 +
Und ich habe ein Modell:
%Vor% So haben viele andere Modelle einen Fremdschlüssel, der sich auf das FileReference
-Modell bezieht.
Aber manchmal werden die referenzierenden Modelle gelöscht, mit dem Objekt FileReference
.
Ich möchte die FileReference
-Objekte ohne Fremdschlüsselreferenzierung löschen.
Aber so viele andere Orte werden Fremdschlüssel haben.
Gibt es einen effizienten Weg, alle Referenzen zu finden? d. h. die Referenzzählung eines Modellobjekts erhalten?
Ich bin auf diese Frage gestoßen und habe eine Lösung für dich gefunden. Beachten Sie, dass django==1.6
nicht mehr unterstützt wird, daher wird diese Lösung wahrscheinlich auf django>=1.9
Sagen wir, wir sprechen jetzt über zwei der Objekte:
%Vor% Wie Sie in ForeignKey.on_delete FileReference -Objekt löschen, wird das referenzierte Objekt Person
ebenfalls gelöscht.
Nun zu Ihrer Frage. Wie machen wir die Verehrten? Wir wollen bei Person
löschen, dass FileReference
Objekt ebenfalls entfernt wird.
Wir machen das mit post_delete :
%Vor% Was wir dort gemacht haben, war das Löschen der Referenz in avatar
field auf Person
deletion. Beachten Sie, dass der Block try: except:
Schleifenausnahmen verhindern soll.
Extra:
Die obige Lösung funktioniert bei allen zukünftigen Objekten. Wenn Sie alle früheren Objekte ohne eine Referenz entfernen möchten, gehen Sie folgendermaßen vor:
Fügen Sie in Ihrem Paket folgende Dateien und Verzeichnisse hinzu: management/commands/remove_unused_file_reference.py
Wenn Sie fertig sind, rufen Sie an: python manage.py remove_unused_file_reference
Dies ist die Grundidee, Sie können es ändern, um es zu löschen usw. ...
Ich hoffe, das wird jemandem da draußen helfen. Viel Glück!
Tags und Links python django model-view-controller model