明霞山资源网 Design By www.htccd.com
软删除
简单的说,就是当执行删除操作的时候,不正真执行删除操作,而是在逻辑上删除一条记录。这样做的好处是可以统计数据,可以进行恢复操作等等。
预备知识
Managers
Managers 是django models 提供的一个用于提供数据库查询操作的接口,对于Django应用程序中的每个model都会至少存在一个Manager
详细:https://docs.djangoproject.com/en/dev/topics/db/managers/
django实现软删除model
firstly,
from django.db import models from django.db.models.query import QuerySet # 自定义软删除查询基类 class SoftDeletableQuerySetMixin(object): """ QuerySet for SoftDeletableModel. Instead of removing instance sets its ``is_deleted`` field to True. """ def delete(self): """ Soft delete objects from queryset (set their ``is_deleted`` field to True) """ self.update(is_deleted=True) class SoftDeletableQuerySet(SoftDeletableQuerySetMixin, QuerySet): pass class SoftDeletableManagerMixin(object): """ Manager that limits the queryset by default to show only not deleted instances of model. """ _queryset_class = SoftDeletableQuerySet def get_queryset(self): """ Return queryset limited to not deleted entries. """ kwargs = {'model': self.model, 'using': self._db} if hasattr(self, '_hints'): kwargs['hints'] = self._hints return self._queryset_class(**kwargs).filter(is_deleted=False) class SoftDeletableManager(SoftDeletableManagerMixin, models.Manager): pass
secondly,
# 自定义软删除抽象基类 class SoftDeletableModel(models.Model): """ An abstract base class model with a ``is_deleted`` field that marks entries that are not going to be used anymore, but are kept in db for any reason. Default manager returns only not-deleted entries. """ is_deleted = models.BooleanField(default=False) class Meta: abstract = True objects = SoftDeletableManager() def delete(self, using=None, soft=True, *args, **kwargs): """ Soft delete object (set its ``is_deleted`` field to True). Actually delete object if setting ``soft`` to False. """ if soft: self.is_deleted = True self.save(using=using) else: return super(SoftDeletableModel, self).delete(using=using, *args, **kwargs) class CustomerInfo(SoftDeletableModel): nid = models.AutoField(primary_key=True) category = models.ForeignKey("CustomerCategory", to_field="nid", on_delete=models.CASCADE, verbose_name='客户分类', db_constraint=False) company = models.CharField(max_length=64, verbose_name="公司名称")
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
明霞山资源网 Design By www.htccd.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
明霞山资源网 Design By www.htccd.com
暂无评论...
P70系列延期,华为新旗舰将在下月发布
3月20日消息,近期博主@数码闲聊站 透露,原定三月份发布的华为新旗舰P70系列延期发布,预计4月份上市。
而博主@定焦数码 爆料,华为的P70系列在定位上已经超过了Mate60,成为了重要的旗舰系列之一。它肩负着重返影像领域顶尖的使命。那么这次P70会带来哪些令人惊艳的创新呢?
根据目前爆料的消息来看,华为P70系列将推出三个版本,其中P70和P70 Pro采用了三角形的摄像头模组设计,而P70 Art则采用了与上一代P60 Art相似的不规则形状设计。这样的外观是否好看见仁见智,但辨识度绝对拉满。