Django:删除外键后保留日志



我的问题很简单: 我有一个文件夹模型,我有一个日志模型。以下是简化的示例:

class Folder(models.Model):
name = models.CharField(max_length=100)
class Log(models.Model):
folder = models.ForeignKey(Folder, on_delete="I NEED HELP HERE")

这意味着,文件夹是由用户创建的,并且对文件夹执行的每个操作都是使用日志模型记录的(用户编辑的文件夹,用户使用文件夹执行此操作等...

我想做的很简单:如果某些管理员完全删除了该文件夹,我仍然希望保留该文件夹的名称。on_delete属性中的所有操作,不要让我这样做。

有什么想法吗?

PS:这些不是真正的模型,只是我想做什么的例证。真正的是100+行代码:P

你可以实现自己的on_delete触发器,因为on_delete只期望一个可调用对象,如果它引用的对象被删除,就会调用该可调用对象: Django 会触发管理本身。但这可能只会使它变得更加复杂。

我认为最好Folder">软删除"模型。在这里,如果您删除模型,它不会从数据库中删除,但数据库有一个带有布尔值的列,用于指定是否"删除"记录。如果将其删除,它通常不会包含在模型上的标准查询集中,但仍有办法获取它所引用的项。此外,您以后可以通过"取消删除"来恢复已删除的对象。例如,您可以使用django-softdelete包 [GitHub]。

我想我找到了答案,我所做的只是设置一个默认值,然后输入on_delete=models。SET_DEFAULT。

默认值是从函数返回的变量,在模型的正上方声明,获取用户名并将其存储在不同的表中。

最新更新