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中使用底层数据库是不会生效的。)
在管理界面中删除对象时,我想防止删除相关对象。
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中使用底层数据库是不会生效的。)