Skip to main content

Soft delete models, managers, queryset for Django

Project description

Django Soft Delete

This is a set of small classes to make soft deletion of objects.
Use the abstract model SoftDeleteModel for adding two new fields:

  • is_deleted - is a boolean field, shows weather of a deletion state of object
  • deleted_at - is a DateTimeField, serves a timestamp of deletion.

Also, you can use SoftDeleteManager and DeletedManager object managers for getting alive and deleted objects accordingly.

By default, the SoftDeleteModel has objects attribute as SoftDeleteManager and deleted_objects attribute as DeletedManager.

How to use

pip install django-soft-delete

Add the SoftDeleteModel as a parent for your model:

# For regular model
from django.db import models
from django_softdelete.models import SoftDeleteModel

class Article(SoftDeleteModel):
    title = models.CharField(max_length=100)
    
    # Following fields will be added automatically
    # is_deleted
    # deleted_at
    
    # Following managers will be added automatically
    # objects = SoftDeleteManager()
    # deleted_objects = DeletedManager()
    # global_objects = GlobalManager()


# For inherited model
from django_softdelete.models import SoftDeleteModel

class Post(SoftDeleteModel, SomeParentModelClass):
    title = models.CharField(max_length=100)

Make and apply the migrations:

./manage.py makemigrations
./manage.py migrate

Relations

You can also use soft deletion for models that are related to others. This library does not interfere with standard Django functionality. This means that you can also use cascading delete, but remember that soft delete only works with the SoftDeleteModel classes. If you delete an instance of the parent model and use cascading delete, then the instances of the child model will be hard-deleted. To prevent hard deletion in this case, you should use SoftDeleteModel for child models in the same way as for parent model.

Quick example

a1 = Article.objects.create(title='django')
a2 = Article.objects.create(title='python')
a3 = Article.objects.create(title='django_softdelete')
Article.objects.count()  # 3

a1.delete()  # soft deletion of object
Article.objects.count()  # 2

deleted_a1 = Article.deleted_objects.first()  # <Article: 'django'>
deleted_a1.restore()  # restores deleted object
Article.objects.count()  # 3
Article.deleted_objects.count()  # 0

a1.hard_delete()  # deletes the object at all.

Batch deletion

Article.objects.filter(some_value=True).delete()  # soft delete for all filtered objects
Article.deleted_objects.filter(some_value=True).restore()  # restore for all filtered objects

Custom manager

If you need a soft delete functionality for model with your own object manager, you want to extend it with the SoftDeleteManager.

from django_softdelete.models import SoftDeleteManager

class YourOwnManager(SoftDeleteManager):
    pass

The same class exists for the deleted_objects manager too -- DeletedManager.

Custom QuerySet

If you need to use soft delete functionality for your custom QuerySet, use the SoftDeleteQuerySet as a parent class or extending existing one.

from django_softdelete.models import SoftDeleteQuerySet

class YourOwnQuerySet(SoftDeleteQuerySet):
    pass

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-delete-1.0.14.tar.gz (11.7 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_delete-1.0.14-py3-none-any.whl (10.6 kB view details)

Uploaded Python 3

File details

Details for the file django-soft-delete-1.0.14.tar.gz.

File metadata

  • Download URL: django-soft-delete-1.0.14.tar.gz
  • Upload date:
  • Size: 11.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.6

File hashes

Hashes for django-soft-delete-1.0.14.tar.gz
Algorithm Hash digest
SHA256 428df56ea4fbb13f42d4f752f11f2a517aa31ac3d1b450e6b78c4c5d5d9dfc3b
MD5 93e0d33d83c4ade03af569f02d3c558b
BLAKE2b-256 7efda4a0192afac3a589fcaa8c4c694e204af8df9cb92c155e6c6fda732f6ccb

See more details on using hashes here.

File details

Details for the file django_soft_delete-1.0.14-py3-none-any.whl.

File metadata

File hashes

Hashes for django_soft_delete-1.0.14-py3-none-any.whl
Algorithm Hash digest
SHA256 558821ea988fd69a3a7008cdb33a06ded491af828bdffa5b287fa0fb72b52a09
MD5 81eaf3e2df8af1f3173f0b543c561e86
BLAKE2b-256 3e47e29d8fec7e3a9dea20a42c1d3dc7f84e72f0737781047c65fe11156c1cb4

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