From 4ea615811be7046ac387108f6471e8df861414e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aleksi=20H=C3=A4kli?= Date: Wed, 11 Feb 2026 21:17:05 +0200 Subject: [PATCH] Implement custom lazy object to avoid JSON errors with Celery Fixes jazzband/django-axes#1391 --- axes/conf.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/axes/conf.py b/axes/conf.py index 33d58ec..6c3a59f 100644 --- a/axes/conf.py +++ b/axes/conf.py @@ -3,6 +3,18 @@ from django.contrib.auth import get_user_model from django.utils.functional import SimpleLazyObject from django.utils.translation import gettext_lazy as _ + +class JSONSerializableLazyObject(SimpleLazyObject): + """ + Celery/Kombu config inspection may JSON-encode Django settings. + Provide a JSON-friendly representation for lazy values. + + Fixes jazzband/django-axes#1391 + """ + def __json__(self): + return str(self) + + # disable plugin when set to False settings.AXES_ENABLED = getattr(settings, "AXES_ENABLED", True) @@ -51,7 +63,7 @@ def _get_username_field_default(): settings.AXES_USERNAME_FORM_FIELD = getattr( settings, "AXES_USERNAME_FORM_FIELD", - SimpleLazyObject(_get_username_field_default), + JSONSerializableLazyObject(_get_username_field_default), ) # use a specific password field to retrieve from login POST data