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
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().
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.

Configure middleware and use CurrentUserField in models to auto-populate creator/updater.

# 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