2016-04-21 2 views
-1

Wenn ein Künstler im folgenden Modell über den Admin gelöscht wird, werden alle zugehörigen Songs bestätigt und gelöscht. Wenn ich jedoch einen Song über den Admin lösche, möchte ich auch den Künstler löschen, wenn der Künstler in Song keine verwandten Elemente mehr hat. Gibt es dafür eine Modelloption im Admin?Django löscht eine Modellinstanz mit keinem verwandten ForeignKey-Element in einem anderen Modell?

Wie sollte dies in einer benutzerdefinierten Ansicht nicht innerhalb von ModelAdmin getan werden?

class Artist (models.Model): 
    name = models.CharField(max_length=100) 

    def __str__(self): 
     return self.name 

class Genre (models.Model): 
    name = models.CharField(max_length=100) 
    def __str__(self): 
     return self.name 

class Song (models.Model):  
    artist = models.ForeignKey(Artist, on_delete=models.CASCADE) 
    genre = models.ForeignKey(Genre, null=True, blank=True, on_delete=models.SET_NULL) 
    title = models.CharField(max_length=100) 
    mix = models.CharField(max_length=100, blank=True) 

    def __str__(self): 
     return self.title 
+0

möchten Sie vielleicht 'pre_delete' Signal verwenden, um den Künstler zu löschen – karthikr

Antwort

0

Könnte dies tun durch die delete Methode eines Song.

def delete(*args, **kwargs): artist = self.artist super(Song, self).delete(*args, **kwargs) if artist.song_set.count() == 0: artist.delete()

oder etwas ähnliches.

+0

Kein Zusammenhang, warum dies abgelehnt wurde. Wenn diese Regel bei Song.delete immer der Fall ist, dann ist dies ein gültiger und direkter Ansatz. Wenn dies nur durch Admin und nicht den allgemeinen Fall geschieht, könnte ich das Problem damit sehen. – Shay

Verwandte Themen