django-currentuser
raw JSON → 0.10.0 verified Mon Apr 27 auth: no python
A Django middleware and model mixin that automatically saves the current request user as the creator/last modifier of model instances. Version 0.10.0 supports Django 4.2-5.1, Python >=3.10. Released roughly twice per year.
pip install django-currentuser Common errors
error AttributeError: module 'django_currentuser' has no attribute 'get_current_user' ↓
cause Importing from the top-level package instead of the middleware module.
fix
Use 'from django_currentuser.middleware import get_current_user'.
error django.core.exceptions.ImproperlyConfigured: Requested setting INSTALLED_APPS, but settings are not configured. ↓
cause Calling get_current_user() before Django settings are fully loaded (e.g., in module-level code).
fix
Move user retrieval inside functions or views, or use the middleware pattern.
error TypeError: Field 'id' expected a number but got <SimpleLazyObject> ↓
cause Older versions of django-currentuser didn't resolve lazy user objects properly.
fix
Upgrade to django-currentuser >=0.5.3 (Django 3.2+). If still present, ensure MIDDLEWARE order has AuthenticationMiddleware before CurrentUserMiddleware.
error AttributeError: 'NoneType' object has no attribute 'pk' ↓
cause CurrentUserField(on_update=True) is called when get_current_user() returns None (e.g., outside request).
fix
Set null=True on the field or set a fallback user via set_current_user().
Warnings
gotcha CurrentUserField on_update=True requires the field to be nullable or have a default, otherwise saving an existing object without an explicit user will fail. ↓
fix Add null=True, blank=True to the field or ensure get_current_user() never returns None.
gotcha Using get_current_user() outside of a request (e.g., in management commands, tests, or Celery tasks) returns None unless you manually set the thread-local user. ↓
fix Call 'from django_currentuser.middleware import set_current_user; set_current_user(user)' before accessing get_current_user().
deprecated The import path 'from django_currentuser.fields import CurrentUserField' is deprecated since v0.5.0. ↓
fix Use 'from django_currentuser.db.models import CurrentUserField'.
gotcha The update_on_save feature does not work with bulk_create or bulk_update; the current user is only set on individual model save(). ↓
fix Override bulk operations to set the user explicitly, or avoid bulk create/update on models with CurrentUserField.
Imports
- get_current_user
from django_currentuser.middleware import get_current_user - CurrentUserField wrong
from django_currentuser.fields import CurrentUserFieldcorrectfrom django_currentuser.db.models import CurrentUserField - CurrentUserMiddleware
from django_currentuser.middleware import CurrentUserMiddleware
Quickstart
# settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
...
]
MIDDLEWARE = [
'django.contrib.sessions.middleware.SessionMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django_currentuser.middleware.CurrentUserMiddleware',
...
]
# models.py
from django.db import models
from django_currentuser.db.models import CurrentUserField
class Article(models.Model):
title = models.CharField(max_length=255)
created_by = CurrentUserField()
updated_by = CurrentUserField(on_update=True)
# migrate and use normally
from django_currentuser.middleware import get_current_user
user = get_current_user() # returns request.user or None