Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django是否删除另一个模型中没有其他相关ForeignKey项的模型实例?_Python_Django - Fatal编程技术网

Python Django是否删除另一个模型中没有其他相关ForeignKey项的模型实例?

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

在下面的模型中,当艺术家通过管理员删除时,它将确认并删除所有相关歌曲。然而,当我通过管理员删除一首歌曲时,若歌手在歌曲中并没有更多的相关项目,我也想删除歌手。管理中是否有用于此的模型选项

如何在自定义视图中而不是在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

可以通过歌曲的
delete
方法来实现这一点

def delete(*args,**kwargs):
艺术家
超级(歌曲,自我)。删除(*args,**kwargs)
如果artist.song_set.count()=0:
艺术家删除()


或者类似的东西。

您可能需要使用
pre_delete
信号来删除艺人没有上下文来解释为什么这被否决。如果Song.delete始终使用此规则,则这是一种有效且简单的方法。如果这只是通过管理,而不是一般情况下,那么我可以看到它的问题。