2016-12-22 4 views
0

gelöscht Ich habe ein Modell Vererbung in django etwas wie folgt aus:Django geerbt Modelle sind nicht vollständig

class A(models.Model): 
name = models.CharField (max_length = 255, unique = True) 

class B(A): 
desc = models.CharField (max_length = 255) 

und wenn löschen, die auf B tun lässt es eine Spur von „Müll“ entires von A zurück.

obj = B.objects.create(name = "My", desc = "left overs") 
obj.delete() 

jetzt kann ich nicht ändern das Modell t 1to1 FK bis A statt Vererbung zu haben, weil es sich um eine bereits laufende Software. Gibt es eine gute Möglichkeit, eine ordnungsgemäße Löschung zu tun?

Vielen Dank im Voraus!

Antwort

0

Leider ist in diesem Fall, was Sie haben, zwei Tabellen, ohne Beziehung zueinander.

Vererbung bedeutet nicht eine FK-Beziehung; es bedeutet nur, ganz wörtlich: Vererbung noch schafft die ursprüngliche Tabelle

alle Spaltendefinitionen aus der ererbten Tabelle zu kopieren, so dass ich nicht haben sie

wieder zu schreiben, es sei denn, Sie übergeben abstract = True zum übergeordneten Modell.

Um dieses Problem dauerhaft zu lösen, müssen Sie eine Datenbankmigration tun, und dann entweder [a] löschen Tabelle A, und fügen Sie abstract = True seine Definition oder [b] eine geeignete Fremdschlüsselbeziehung erstellen.

Vorerst, was Sie tun können, ist es, alle A ‚s, die keine B haben‘ gefunden s und diejenigen löschen. Leider gibt es keinen Trick, Sie müssen es auf sehr ineffiziente Weise tun:

for obj in A.objects.all(): 
    if not obj.b_set.all(): 
     obj.delete()