Django - 逻辑删除

Pab*_*blo 1 django django-models

我想对Django框架进行以下修改.

我希望它为我创建的每个模型创建一个"已删除"字段.

当我从管理页面删除它而不是被物理删除时,我希望它被检查为已删除.

我不希望列出检查为已删除的这些记录.

我是Django的新手,我看到我是否可以轻松地做我想做的事情.我需要这种改变,因为这是我们目前的工作方式.

到目前为止这些都是我所做的改变,我想了解整个Django framewok是如何在里面工作的,但我离这个很远,有没有在线文档可以清楚地解释内部框架部分/文件/模块/类共同努力,每个人的具体作用等

在base.py文件的modelbase类中,在此代码下面,

for obj_name, obj in attrs.items():
new_class.add_to_class(obj_name, obj)
Run Code Online (Sandbox Code Playgroud)

我补充说,

from django.db import models
    new_class.add_to_class('deleted', models.BooleanField())
Run Code Online (Sandbox Code Playgroud)

当它创建模型时,它会向其添加"已删除"字段.

在base.py文件中,在save方法中,我更改了它的用途

self.deleted = True
self.save()
Run Code Online (Sandbox Code Playgroud)

所以,现在它检查已删除的记录而不是物理删除它.

现在我想要的是那些没有列出的记录.

Edw*_*ale 7

我不明白为什么你要修改框架代码而不是将你的deleted字段放在你所有模型扩展的模型基类中.

然而,过滤这些记录的一种好方法是将自定义管理器添加到模型(或者您的基础模型类,如果您选择创建一个).对于此管理器,请覆盖此处所述的get_query_set方法.在重写的方法中,添加一个过滤器.exclude(deleted=True)