Python Django是否删除另一个模型中没有其他相关ForeignKey项的模型实例?
在下面的模型中,当艺术家通过管理员删除时,它将确认并删除所有相关歌曲。然而,当我通过管理员删除一首歌曲时,若歌手在歌曲中并没有更多的相关项目,我也想删除歌手。管理中是否有用于此的模型选项 如何在自定义视图中而不是在ModelAdmin中执行此操作Python Django是否删除另一个模型中没有其他相关ForeignKey项的模型实例?,python,django,Python,Django,在下面的模型中,当艺术家通过管理员删除时,它将确认并删除所有相关歌曲。然而,当我通过管理员删除一首歌曲时,若歌手在歌曲中并没有更多的相关项目,我也想删除歌手。管理中是否有用于此的模型选项 如何在自定义视图中而不是在ModelAdmin中执行此操作 class Artist (models.Model): name = models.CharField(max_length=100) def __str__(self): return self.name cla
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
可以通过歌曲的
delete
方法来实现这一点
def delete(*args,**kwargs):
艺术家
超级(歌曲,自我)。删除(*args,**kwargs)
如果artist.song_set.count()=0:
艺术家删除()
或者类似的东西。您可能需要使用
pre_delete
信号来删除艺人没有上下文来解释为什么这被否决。如果Song.delete始终使用此规则,则这是一种有效且简单的方法。如果这只是通过管理,而不是一般情况下,那么我可以看到它的问题。