2016-04-21 59 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