A Django-based library for implementing soft deletion using a deleted_at timestamp.
Project description
Django Soft Deletion 🚀
Django Soft Deletion is a Django-based library that enables soft deletion by using a deleted_at timestamp instead of permanently removing records. This allows you to mark objects as deleted while keeping them in the database.
📌 Features
✅ Soft Delete Models – Records are hidden, not deleted.
✅ Custom QuerySet – Easily filter active and deleted records.
✅ Works with Django ORM – No need for major changes in your models.
✅ Cascade Soft Delete Support – Automatically soft deletes related objects.
✅ Signal Support – Pre and post soft delete signals included.
📦 Installation
pip install git+https://github.com/alirafiei75/django-soft-deletion.git
🔧 Usage
1️⃣ Add SoftDeleteModel to Your Models
Extend SoftDeleteModel in your models to enable soft deletion:
from soft_deletion.models import SoftDeleteModel
class MyModel(SoftDeleteModel):
name = models.CharField(max_length=255)
2️⃣ Soft Delete an Object
Instead of permanently deleting an object, soft delete it:
obj = MyModel.objects.get(id=1)
obj.soft_delete()
3️⃣ Query Active or Deleted Objects
Use the built-in queryset filters:
# Get only active (non-deleted) records
MyModel.objects.active()
# Get only soft-deleted records
MyModel.objects.deleted()
⚡ Soft Delete Behavior with Foreign Keys
django-soft-deletion respects Django's on_delete behavior.
class RelatedModel(SoftDeleteModel):
name = models.CharField(max_length=255)
class MyModel(SoftDeleteModel):
name = models.CharField(max_length=255)
related = models.ForeignKey(RelatedModel, on_delete=models.CASCADE)
on_delete=models.CASCADE→ Related objects are also soft deleted.on_delete=models.SET_NULL→ The foreign key is set to NULL when soft deleting.on_delete=models.PROTECT→ Prevents soft deletion if related objects exist.
📜 Soft Delete Signals
You can hook into soft delete events using signals:
from soft_deletion.signals import pre_soft_delete, post_soft_delete
def pre_delete_handler(sender, instance, **kwargs):
print(f"About to soft delete: {instance}")
pre_soft_delete.connect(pre_delete_handler, sender=MyModel)
✅ Running Tests
To ensure everything works correctly, run:
pytest
Or using Django's test framework:
python manage.py test
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file django_soft_deletion_model-1.0.0.tar.gz.
File metadata
- Download URL: django_soft_deletion_model-1.0.0.tar.gz
- Upload date:
- Size: 7.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.9.21
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cab7dc0912f369b6dfb9c7f69638ca4ed1670f988c45f0b1cec1be56e0a9bc2e
|
|
| MD5 |
fb002f7a6de42b3af2225b4a55e9af89
|
|
| BLAKE2b-256 |
065b0162363799648ed64fdc2bae0fa7657ddbd1442d9be426fc87b1574f972d
|
File details
Details for the file django_soft_deletion_model-1.0.0-py3-none-any.whl.
File metadata
- Download URL: django_soft_deletion_model-1.0.0-py3-none-any.whl
- Upload date:
- Size: 9.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.9.21
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4da828926ed8eccd76f87ae6e19fa1122f59246a4a20ebd1cf666cf3a677820f
|
|
| MD5 |
d05a11eda3b834bae8664964a09a8dca
|
|
| BLAKE2b-256 |
1d80358c0d86a2b23e8b748655c83ba6652ac54181d87ec6359509ec7b4a75c6
|