import contextvars from django.core.exceptions import ImproperlyConfigured from django.db import models current_event = contextvars.ContextVar("current_event", default=None) class EventScopedQuerySet(models.QuerySet): def for_current_event(self): event = current_event.get() if event is None: raise ImproperlyConfigured( f"{self.model.__name__}.for_event was used outside an event-scoped request" ) return self.filter(event=event) class EventScopedManager(models.Manager.from_queryset(EventScopedQuerySet)): def get_queryset(self): return super().get_queryset().for_current_event()