This package provides an abstract django model, that allows you to transparently retrieve or delete your objects, without having them deleted from your database.
from django_soft_delete.models import SoftDeletionModel
class User(SoftDeletionModel):
name = models.CharField(max_length=100)
user = User(name='test')
user.save()
user.delete()
users = User.objects.filter(name='test')
users.delete()
User.object.filter(name='test') #returns empty query string.
User.all_objects.filter(name='test) #returns deleted user instance which has non empty deleted_at field.
In order to create model deletion relations, you have to import deletion.py and use the related on_delete functions like CASCADE, PROTECT, etc.
from django_soft_delete.deletion import CASCADE
from django_soft_delete.models import SoftDeletionModel
class User(SoftDeletionModel):
name = models.CharField(max_length=100)
class Profile(SoftDeletionModel):
name = models.CharField(max_length=100)
user = models.ForeignKey(User, on_delete=CASCADE,
verbose_name=_('User'), null=True,
blank=True)
user = User(name='test')
user.save()
user.delete()
user.undelete()
user = User(name='test')
user.save()
user.hard_delete()
- pip install soft-django-delete
INSTALLED_APPS = [
'django_soft_delete',
[...]
]