For various reasons, you may want to avoid deleting objects from your database.
This Django application provides a model mixin, that allows you to transparently retrieve or delete your objects, without having them deleted from your database.
- You can choose what happens when you delete an object :
- it can be masked from your database (soft delete, the default behavior)
- it can be normally deleted (hard delete)
- it can be hard-deleted, but if its deletion would delete other objects, it will only be masked
- it can be never deleted or masked from your database (no delete, use with caution)
# imports
from safedelete.models import SafeDeleteMixin
from safedelete.models import HARD_DELETE_NOCASCADE
# Models
# We create a new model, with the given policy : Objects will be hard-deleted, or soft deleted if other objects would have been deleted too.
class Article(SafeDeleteMixin):
_safedelete_policy = HARD_DELETE_NOCASCADE
name = models.CharField(max_length=100)
class Order(SafeDeleteMixin):
_safedelete_policy = HARD_DELETE_NOCASCADE
name = models.CharField(max_length=100)
articles = models.ManyToManyField(Article)
# Example of use
>>> article1 = Article(name='article1')
>>> article1.save()
>>> article2 = Article(name='article2')
>>> article2.save()
>>> order = Order(name='order')
>>> order.save()
>>> order.articles.add(article1)
# This article will be masked, but not deleted from the database as it is still referenced in an order.
>>> article1.delete()
# This article will be deleted from the database.
>>> article2.delete()
- Branch 0.2.x is compatible with django >= 1.2
- Branch 0.3.x is compatible with django >= 1.4
- Branch 0.4.x is compatible with django >= 1.8
Current branch (0.4.x) has been tested with :
- Django 1.8 using python 2.7 and python 3.3 to 3.4.
- Django 1.9 using python 2.7 and python 3.4 to 3.5.
- Django 1.10 using python 2.7 and python 3.4 to 3.5.
Installing from pypi (using pip).
pip install django-safedelete
Installing from github.
pip install -e git://github.com/makinacorpus/django-safedelete.git#egg=django-safedelete
The application doesn't have any special requirement.
The documentation is available here.
Please see the LICENSE file.
Please see the AUTHORS file.