Skip to content

Instantly share code, notes, and snippets.

@i
Created July 19, 2018 15:12
Show Gist options
  • Save i/4ac52b06d7991ff52426dd16573a8038 to your computer and use it in GitHub Desktop.
Save i/4ac52b06d7991ff52426dd16573a8038 to your computer and use it in GitHub Desktop.
class SoftDeleteManager(models.Manager):
def __init__(self, *args, **kwargs):
self.with_deleted = kwargs.pop('deleted', False)
super(SoftDeleteManager, self).__init__(*args, **kwargs)
def _base_queryset(self):
return super().get_queryset().filter(deleted_at=None)
def get_queryset(self):
qs = self._base_queryset()
if self.with_deleted:
return qs
return qs.filter(is_deleted=False)
class SoftDeleteModel(BaseModel):
class meta:
abstract = True
objects = SoftDeleteManager()
objects_with_deleted = managers.SoftDeleteManager(deleted=True)
is_deleted = models.BooleanField(null=False, default=False)
def delete(self):
self.is_deleted = True
self.save()
def restore(self):
self.is_deleted = False
self.save()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment