class SoftDeleteQuserySet(models.QuerySet):
'''多个记录逻辑删除'''
# 重写queryset的delete方法
def delete(self):
self.update(f_is_deleted=True)
class SoftDeleteManager(models.Manager):
_queryset_class = SoftDeleteQuserySet
# 重写get_queryset方法,每次只过滤is_deleted为False或空的
def get_queryset(self):
return super().get_queryset().filter(Q(f_is_deleted=False) | Q(f_is_deleted__isnull=True))
# 这是自定义模型,我们为其添加管理器
class TBdFuncFeatureDict(models.Model):
f_id = models.CharField(db_column='F_Id', primary_key=True, max_length=32,
db_comment='ID') # Field name made lowercase.
f_is_deleted = models.BooleanField(db_column='F_Is_Deleted', default=False)
objects = SoftDeleteManager() # 模型受SoftDeleteManager管理
def delete(self, using=None, keep_parents=False):
'''删除单个元素'''
self.is_deleted = True
self.save()
class Meta:
managed = False
db_table = 'table_name'
Django实现逻辑删除(单个对象与批量删除)
于 2024-03-07 14:21:48 首次发布