我的问题很简单: 我有一个文件夹模型,而我有一个日志模型。以下是简化的示例:
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
答案 0 :(得分:1)
您可以实现自己的on_delete
触发器,因为on_delete
只是期望一个可调用对象,如果它所引用的对象被删除,则会被调用:Django会自行触发管理。但这只会使其变得更加复杂。
我认为最好将Folder
设为“ 软删除”模型。在这种情况下,如果您删除模型,则不会从数据库中删除它,但是数据库中有一列包含一个布尔值,用于指定记录是否被“删除”。如果将其删除,则通常不会将其包含在模型的标准查询集中,但是仍然有一些方法可以获取它所引用的项目。此外,您以后可以通过“删除”它来恢复已删除的对象。例如,您可以使用django-softdelete
package [GitHub]。
答案 1 :(得分:0)
我想我找到了答案,我所做的就是设置一个默认值,然后放入on_delete = models.SET_DEFAULT。
默认值是从函数返回的变量,该变量在模型的正上方声明,并使用用户名并将其存储在其他表中。