Registry / web-framework / django-dynamic-preferences

django-dynamic-preferences

JSON →
library1.17.0pypypiunverified

Dynamic global and instance settings for your Django project. Version 1.17.0. Release cadence: infrequent, last updated in 2023.

pip install django-dynamic-preferences
INSTALL
IMPORT
SIG · DJANGO-DYNAMIC-PRE
D
django-dynamic-preferences
web-frameworkpythonv1.17.0
harness data pending
Install & Compatibility
Where this runs

No compatibility data collected yet for this library.

Code
Verified usage

Verified import paths — ran on the pinned version, not inferred.

DynamicPreferencesMixin
from dynamic_preferences.users.mixins import DynamicPreferencesMixin
from dynamic_preferences.users.mixins import DynamicPreferencesMixin

Basic setup with global and per-user preferences. Requires Django User model to inherit from DynamicPreferencesMixin.

# settings.py INSTALLED_APPS = [ 'dynamic_preferences', 'dynamic_preferences.users', ] # urls.py from django.urls import path, include urlpatterns = [ path('preferences/', include('dynamic_preferences.urls')), ] # models.py from dynamic_preferences.users.mixins import DynamicPreferencesMixin from django.contrib.auth.models import AbstractUser class User(DynamicPreferencesMixin, AbstractUser): pass # views.py from dynamic_preferences.registries import global_preferences_registry from dynamic_preferences.users.registries import user_preferences_registry def my_view(request): global_prefs = global_preferences_registry.manager() user_prefs = user_preferences_registry.manager(request.user) # Access a preference value = global_prefs.get('general__site_name') return render(request, 'template.html', {'site_name': value})
Debug
Known issues
breakingIn version 1.10+, the user preference registry is no longer automatically attached to the User model via a signal. You must explicitly add DynamicPreferencesMixin to your User model.
fix
Ensure your User model inherits from DynamicPreferencesMixin.

from dynamic_preferences.users.mixins import DynamicPreferencesMixin
class User(DynamicPreferencesMixin, AbstractUser):
    pass
affects: >=1.10
gotchaThe preference name separator is double underscore (e.g., 'general__site_name'). A single underscore may be silently ignored.
fix
Always use double underscore between section and name when accessing preferences (e.g., get('general__site_name')).
affects: all
deprecatedThe old-style registration using preference decorators with explicit section and name is deprecated. Use the registry's register method or the @register_preference decorator with a class.
fix
Migrate to class-based preference definitions.

from dynamic_preferences.preferences import GlobalPreferenceModel
from dynamic_preferences.registries import global_preferences_registry

@global_preferences_registry.register
class SiteName(GlobalPreferenceModel):
    section = 'general'
    name = 'site_name'
    verbose_name = 'Site Name'
    default = 'My Site'
affects: >=1.11
gotchaWhen using the PreferenceForm, the form field names are prefixed with the section and separated by double underscore (e.g., 'general__site_name'). If you manually render fields, ensure you use these names.
fix
Use the provided template tags or manually reference the prefixed field names.
affects: all
breakingSupport for Python 2 was dropped in version 1.10.
fix
Upgrade to Python 3.6+.
affects: >=1.10
Upgrade
Version history
1.17.0latest on PyPI · released Jan 10, 2025
Audit
Dependencies
djangorequiredCore dependency
django-picklefieldrequiredRequired for storing preference values
sixoptionalPython 2/3 compatibility (may be removed in future)
Agent activity
19 hits · last 30 days
node
16
OpenAI (training)
2
Resources
django-dynamic-preferences — pip install django-dynamic-preferences · libregistry