2016-04-21 57 views
-1

在下面的模型中,當通過管理員刪除藝術家時,它將確認並刪除所有相關歌曲。但是,當我通過管理員刪除歌曲時,如果歌手在歌曲中沒有更多相關項目,我也想要刪除歌手。在Admin中是否有一個模型選項?Django在另一個模型中刪除一個沒有更多相關ForeignKey項目的模型實例?

這應該如何在ModelAdmin內部的自定義視圖中完成?

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

您可能想使用'pre_delete'信號刪除藝術家 – karthikr

回答

0

可以通過一個Songdelete方法做到這一點。

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

或類似的東西。

+0

沒有背景知道爲什麼這是倒票。如果Song.delete總是這樣的規則,那麼這是一個有效且直接的方法。如果這只是通過管理員而不是一般情況下,那麼我可以看到它的問題。 – Shay