2017-02-16 4 views
0

Ich habe eine Django 1.6-Modellstruktur, in der Instanzen eine gemeinsame Modellinstanz als Unterklasse verwenden.Statusfreigabe und Löschung in Modellvererbung

inheritance

In Datenbank Hinsicht ist es eine Zeile für A eine Zeile für B und eine Zeile für C die parent_link für IDs.

Wenn .delete() auf C' die Zeile für A und C ruft gelöscht, aber es ist eine Waise Rekord für B. Instanziieren A direkt und Aufruf von löschen kaskadiert die Löschung an B und C Instanzen. Wie kann ich auf die einfachste Art und Weise sicherstellen, dass eine Instanz von B oder C gelöscht wird, wird sowohl der Eltern- als auch der Geschwisterstatus gelöscht?

Durch Löschen einer Instanz von A werden verknüpfte Instanzen von B und C gelöscht. Das Löschen von B bewirkt die Löschung von B und A. Die Löschung von C verursacht C- und A-Deletionen.

Wie kann ich es so haben, dass das Löschen einer beliebigen A-, B- oder C-Instanz alle anderen Instanzen löscht, unabhängig davon, ob die Instanz delete() aufgerufen wird?

Als Randnotiz erscheinen alle Instanzen gelöscht werden, so dass, wenn .delete() bei C' Aufruf scheint es, dass der Grundzustand und B' gelöscht werden, aber infact erscheinen die Zeile für B' wird anhalten und nicht in Abfragen, bis eine andere Basis-Instanz erstellt, wo die PK ausgerichtet ist. In diesem Fall erscheint B' wieder von den Toten.

Hier ist die Klassen:

class A(models.Model): 
    # Fields here 

class B(A): 
    a_ptr = models.OneToOneField(A, parent_link=True) 
    # More fields 

class C(A): 
    a_ptr = models.OneToOneField(A, parent_link=True) 
    # More fields 

# Code 
shared_state = A() 
shared_state.save() 
sharer_b = B(a_ptr=shared_state.id) 
charer_c = C(a_ptr=shared_state.id) 
sharer_b.save() 
sharer_c.save() 

# Objective, this should delete all rows for the above? 
sharer_c.delete() 

Antwort

0

Sie entweder Ihre models delete() method oder verwenden Sie die post_delete signal außer Kraft setzen können. NB: Links beziehen sich auf das aktuelle Release-Dokument, aber das alles funktioniert in 1.6.

+0

Das Problem, das ich mit 1.6 habe, wo 2 Instanzen eine gemeinsame Instanz teilen (B- und C-Instanzen teilen ein A) ist, dass das Löschen von C löscht A, aber B's Zeile existiert noch, ist aber verwaist unzugänglich. –

Verwandte Themen