Django:如何让管理员不删除相关对象?

Django: How to make admin not delete the relative objects?

在管理界面中删除对象时,我想防止删除相关对象。

class ObjectToDelete(models.Model):
    timestamp = models.DateTimeField()

class RelatedObject(models.Model):
    otd = models.ForeignKey('app.ObjectToDelete', null=True, blank=True)

由于 RelatedObject 中的 ForeignKey 可以为空,我应该可以将其设置为 None 而不是删除整个对象。这正是我想要的行为。

我知道我可以为此管理界面创建自定义删除操作。

而且我也知道我可以在 ObjectToDelete 中创建 ManyToManyField,这也会阻止删除 RelatedObject。但是这样我就不会有我想要的一对多关系了。

有没有简单的方法可以做到这一点?

为您的外键设置 on_delete 选项。如果要在删除相关对象时将值设置为 None,请使用 SET_NULL:

models.ForeignKey('app.ObjectToDelete', on_delete=models.SET_NULL)

无论您是在管理面板中还是直接使用模型实例删除对象,这些规则都适用。 (但直接在SQL中使用底层数据库是不会生效的。)