我在Django项目中使用PostgreSQL。 Django在数据库级别不支持“删除时”规则。在应用程序级别,当为模型设置外键时,它允许使用此参数,但是在删除实例时,它仅用于emulate the behavior。我正在尝试运行数据迁移,该数据迁移会从被另一个表引用的表中删除一组行。这些模型如下所示:
class Album(models.Model):
name = models.CharField(max_length=128)
# ...
class Track(models.Model):
name = models.CharField(max_length=128)
album = models.ForeignKey(Album, related_name='tracks', null=True, on_delete=models.SET_NULL)
# ...
我不知道是否应该在查询集或仅模型实例上执行的delete
调用中模拟此行为。对我来说,两者都不起作用。在我看来,最干净的解决方案是添加一个RunSQL,在数据库级别的Track.album
外键上添加一个“ ON DELETE SET NULL”规则(在实际尝试删除“相册”行的RunPython之前)。问题在于Django似乎使用动态名称创建了一个外键约束,因此如果我按名称删除该约束并创建另一个约束,恐怕在部署时迁移可能会失败。没有一种简单的方法可以按列名添加规则(或删除/创建约束)?