The pre_delete signal pre_delete not transmit an instance of the request, but you can add a decorator that adds it and use this decorator in a view that deletes the specified model.
Assuming this is a callback function:
def pre_delete_cb(sender, instance, using, **kwargs): pass
which is added to the decorator:
from django.db.models.signals import pre_delete from functools import wraps from django.utils.decorators import available_attrs def pre_delete_dec(cb, sender): def decorator(view_func): @wraps(view_func, assigned=available_attrs(view_func)) def _wrapped_view(request, *args, **kwargs): cb.request = request
And use the decorator on the view as you call it, instead of pre_delete.connect(pre_delete_cb, MyModel) use:
@pre_delete_dec(pre_delete_cb, MyModel) def myview(request):
and then in the callback you will get access to the request as:
def pre_delete_cb(sender, instance, using, **kwargs): current_user = pre_delete_cb.request.user
You can add this globally, not just for viewing - using Middleware:
from django.db.models.signals import pre_delete def pre_delete_cb(sender, instance, using, **kwargs): current_user = pre_delete_cb.request.user class PreDeleteMiddleware(object): def process_view(self, request, view_func, view_args, view_kwargs): pre_delete_cb.request = request from myapp.models import MyModel pre_delete.connect(pre_delete_cb, sender=MyModel)