Skip to main content

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django_soft_deletion_model-1.0.0.tar.gz (7.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

django_soft_deletion_model-1.0.0-py3-none-any.whl (9.0 kB view details)

Uploaded Python 3

File details

Details for the file django_soft_deletion_model-1.0.0.tar.gz.

File metadata

File hashes

Hashes for django_soft_deletion_model-1.0.0.tar.gz
Algorithm Hash digest
SHA256 cab7dc0912f369b6dfb9c7f69638ca4ed1670f988c45f0b1cec1be56e0a9bc2e
MD5 fb002f7a6de42b3af2225b4a55e9af89
BLAKE2b-256 065b0162363799648ed64fdc2bae0fa7657ddbd1442d9be426fc87b1574f972d

See more details on using hashes here.

File details

Details for the file django_soft_deletion_model-1.0.0-py3-none-any.whl.

File metadata

File hashes

Hashes for django_soft_deletion_model-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 4da828926ed8eccd76f87ae6e19fa1122f59246a4a20ebd1cf666cf3a677820f
MD5 d05a11eda3b834bae8664964a09a8dca
BLAKE2b-256 1d80358c0d86a2b23e8b748655c83ba6652ac54181d87ec6359509ec7b4a75c6

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page