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

时间:2016-04-14 13:04:43

标签: django django-models django-admin

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

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

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

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

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

而且我也知道我可以在ManyToManyField中设置ObjectToDelete,这也会阻止删除RelatedObject。但后来我不会有我想要的一对多关系。

有没有一种简单的方法可以达到这个目的?

1 个答案:

答案 0 :(得分:1)

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

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

这些规则适用于删除对象,无论是在管理面板中执行还是直接使用Model实例。 (但如果直接使用SQL中的底层数据库,它将无法生效。)