我有一个模型,我在其中实现了软删除。但是从 Django admin 删除时,它是从数据库中删除。我如何在 Django 管理中也引入软删除?
软删除的意思是不从数据库中删除数据,模型中的布尔字段“is_deleted”设置为 1”
class Model_1(models.Model):
field_1 = models.CharField(max_length = 25)
.
.
is_active = models.booleanField(default=1)
is_deleted = models.booleanField(default = 0)
class modelForm_1(forms.ModelForm):
class Meta:
model = Model_1
exclude = ("field_1", "field_2", "field_3",)
class ModelAdmin_1(admin.ModelAdmin):
model = Model_1
list_display = ("jobid", "job_title", "position", "employer")
change_form_template = 'admin_panel/detail.html'
form = modelForm_1
admin.site.register(Model_1, ModelAdmin_1)
您可以使用 is_deleted 布尔值和 manager 创建一个 基本抽象模型 来仅列出未删除的对象。
class BaseModel(models.Model):
is_deleted = models.BooleanField(default=False)
class Meta:
abstract = True
def delete(self):
self.is_deleted = True
self.save()
继承基础模型
class Model_1(BaseModel):
field_1 = models.CharField(max_length = 25)
is_active = models.booleanField(default=1)
is_deleted = models.booleanField(default = 0)
objects = BaseModelManager()
添加模型管理器以仅过滤未删除的数据。
class BaseModelManager(models.Manager):
def get_queryset(self):
return super().get_queryset().filter(is_deleted=False)
因此,当通过管理员删除对象时,它们实际上不会从数据库中删除;相反,它们将不再出现在列表视图中。