python / expert
Snippet
Automated Query Scoping via Metaclass QuerySet Injection
By customizing ModelBase metaclass construction, models automatically receive standard custom QuerySet managers upon class definition, ensuring auditing features across domain models without manual manager assignments.
snippet.py
python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
from django.db import modelsclass AuditedQuerySet(models.QuerySet):def active(self):return self.filter(is_deleted=False)class AutoAuditMeta(models.base.ModelBase):def __new__(mcs, name, bases, attrs):cls = super().__new__(mcs, name, bases, attrs)if not cls._meta.abstract:manager = models.Manager.from_queryset(AuditedQuerySet)()manager.contribute_to_class(cls, 'objects')return clsclass BaseAuditedModel(models.Model, metaclass=AutoAuditMeta):is_deleted = models.BooleanField(default=False)class Meta:abstract = True
django
Breakdown
1
class AuditedQuerySet(models.QuerySet):
Defines domain-specific QuerySet filter methods like filtering out soft-deleted objects.
2
class AutoAuditMeta(models.base.ModelBase):
Custom metaclass inheriting from Django's internal ModelBase class.
3
manager = models.Manager.from_queryset(AuditedQuerySet)()
Dynamically builds a Manager class backed by custom QuerySet methods.
4
manager.contribute_to_class(cls, 'objects')
Attaches the generated manager instance as the default 'objects' attribute on non-abstract models.