Django:删除外键后保留日志

时间:2019-12-17 11:10:33

标签: django django-models foreign-keys

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

class Folder(models.Model):
    name = models.CharField(max_length=100)

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

这意味着,一个文件夹由用户创建,并且使用Log模型(用户编辑的文件夹,用户使用文件夹执行此操作等)记录该文件夹上执行的每个操作< / p>

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

有什么想法吗?

PS:那不是真正的模型,只是我想做的事的一个例证。真正的是100多行代码:P

2 个答案:

答案 0 :(得分:1)

您可以实现自己的on_delete触发器,因为on_delete只是期望一个可调用对象,如果它所引用的对象被删除,则会被调用:Django会自行触发管理。但这只会使其变得更加复杂。

我认为最好将Folder设为“ 软删除”模型。在这种情况下,如果您删除模型,则不会从数据库中删除它,但是数据库中有一列包含一个布尔值,用于指定记录是否被“删除”。如果将其删除,则通常不会将其包含在模型的标准查询集中,但是仍然有一些方法可以获取它所引用的项目。此外,您以后可以通过“删除”它来恢复已删除的对象。例如,您可以使用django-softdelete package [GitHub]

答案 1 :(得分:0)

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

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