如何在Django admin中实现软删除?

问题描述 投票:0回答:1

我有一个模型,我在其中实现了软删除。但是从 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)
django django-admin
1个回答
0
投票

您可以使用 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)

因此,当通过管理员删除对象时,它们实际上不会从数据库中删除;相反,它们将不再出现在列表视图中。

© www.soinside.com 2019 - 2024. All rights reserved.