Django: finde alle umgekehrten Referenzen durch Fremdschlüssel

8

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?

    
Alfred Huang 20.03.2015, 02:27
quelle

1 Antwort

1

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

funktionieren

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

%Vor%

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!

    
Gal Silberman 08.03.2018 12:11
quelle