python / intermediate
Snippet
Overriding Model Manager get_queryset for Soft Deletion
Overriding get_queryset in a custom Manager automatically filters out records marked as deleted, hiding soft-deleted objects from default queries.
snippet.py
python
1
2
3
4
5
6
7
8
9
10
11
12
from django.db import modelsclass SoftDeleteManager(models.Manager):def get_queryset(self):return super().get_queryset().filter(is_deleted=False)class Product(models.Model):name = models.CharField(max_length=100)is_deleted = models.BooleanField(default=False)objects = SoftDeleteManager()all_objects = models.Manager()
django
Breakdown
1
class SoftDeleteManager(models.Manager):
Creates a custom manager class inheriting from Django's base Manager.
2
def get_queryset(self):
Overrides the base method responsible for returning default database QuerySets.
3
all_objects = models.Manager()
Provides an explicit secondary manager to query all items including soft-deleted ones.