我有这样的设置(针对这个问题进行了简化):
class Employee(models.Model):
name = models.CharField(name, unique=True)
class Project(models.Model):
name = models.CharField(name, unique=True)
employees = models.ManyToManyField(Employee)
当 Employee
即将被删除时,我想检查他是否连接到任何项目。如果是这样,删除应该是不可能的。
我知道信号以及如何使用它们。我可以连接到 pre_delete
信号,并让它抛出类似 ValidationError
的异常。这可以防止删除,但不会被表单等优雅地处理。
这似乎是其他人会遇到的情况。我希望有人能指出一个更优雅的解决方案。
原文由 dyve 发布,翻译遵循 CC BY-SA 4.0 许可协议
对于那些使用
ForeignKey
关系引用此问题的人,正确的答案是在ForeignKey
关系上使用 Djago 的on_delete=models.PROTECT
字段。这将防止删除任何具有外键链接的对象。这不适用于ManyToManyField
关系(如 本 问题所述),但对ForeignKey
字段非常有用。因此,如果模型是这样的,这将有助于防止删除任何
Employee
对象,该对象具有一个或多个Project
与之关联的对象:可以在 此处 找到文档。