Skip to content

Instantly share code, notes, and snippets.

@victory-sokolov
Last active January 14, 2022 09:45
Show Gist options
  • Save victory-sokolov/8a9e7c1355c00042f77e1bd498b0cf7a to your computer and use it in GitHub Desktop.
Save victory-sokolov/8a9e7c1355c00042f77e1bd498b0cf7a to your computer and use it in GitHub Desktop.
Django SoftDelete
from django.db import models
from django.utils import timezone
from django.db.models.query import QuerySet
class SoftDeletionQuerySet(QuerySet):
def soft_delete(self):
return super(SoftDeletionQuerySet, self).update(deleted=timezone.now())
def restore(self):
return super(SoftDeletionQuerySet, self).update(deleted=None)
class SoftDeleteManager(models.Manager):
def get_queryset(self):
return SoftDeletionQuerySet(self.model).filter(deleted__isnull=True)
class SoftDeleteModel(models.Model):
deleted = models.DateTimeField(null=True)
objects = SoftDeleteManager()
all_objects = models.Manager()
def soft_delete(self):
self.deleted = timezone.now()
self.save()
def restore(self):
self.deleted = None
self.save()
class Meta:
abstract = True
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment