Django框架model+admin实现软删除

在开发过程中,难免会遇到要求删除时不删除数据本身,而是在建model的时候有一个model字段,点击删除按钮后,给字段的值更新为点击删除操作的时间,下面我们进入正题:

而在django里面删除数据有两种方式,一种是在数据详情页面删除,如下所示:

 另外一种是选择数量进行删除,如下所示:

 两种删除方式略有不同,所以我们都要设置,才能实现真正想要的效果。

首先,创建一个delete_at字段,字段类型为DateTimeField,字段允许为空,默认值为空,字段名词为删除时间,接着我们重写delete方法,当每次在详情页执行删除操作时,将delete_at的值修改为删除操作执行的时间,并保存。

class VideoInfo(models.Model):
    create_at = models.DateTimeField(auto_now_add=True, null=True, verbose_name="创建时间")
    update_at = models.DateTimeField(auto_now=True, verbose_name="修改时间")
    delete_at = models.DateTimeField(null=True, default=None, verbose_name="删除时间")
    playback_volume = models.IntegerField(default=0, verbose_name="播放量")

    # 设置软删除,删除时不删除数据,而是给原本空的删除字段值修改为删除操作执行的时间
    def delete(self, using=None, keep_parents=False):
        self.delete_at = datetime.datetime.now()
        self.save()

然后我们在到admin里面添加actions,并在下面重写删除方法。

@admin.register(VideoInfo)
class VideoInfoAdmin(admin.ModelAdmin):
    search_fields = ("video_title",)
    readonly_fields = ("delete_at",)
    list_display = ("id",
                    "video_title",
                    "video_addr",
                    "video_id",
                    "video_size",
                    "video_classification",
                    "playback_volume",
                    "server_phone",
                    "create_at",
                    "update_at",
                    "delete_at")
    actions = ['delete_selected']

    def delete_selected(modeladmin, request, queryset):
        c = 0
        for i in queryset:
            i.delete()
            c += 1
        msg = '成功删除了{}个表管理'.format(c)
        modeladmin.message_user(request, msg)

    delete_selected.short_description = '删除已选项'

之后我们分别到详情页和列表页执行删除操作,可以看到数据本身并没有被删除,而是将原本的空值,修改为了删除操作执行的时间。

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lemuzhi_零度

作者幸苦,犒劳一下

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值