#36604: Add utility for lazy model resolution by string label (e.g.
"app_label.ModelName")
----------------------------------------+------------------------------
Reporter: Mbulelo_Peyi | Owner: Mbulelo_Peyi
Type: New feature | Status: assigned
Component: Utilities | Version: 5.2
Severity: Normal | Keywords:
Triage Stage: Unreviewed | Has patch: 0
Needs documentation: 0 | Needs tests: 0
Patch needs improvement: 0 | Easy pickings: 1
UI/UX: 0 |
----------------------------------------+------------------------------
This feature proposes the addition of two utility functions to simplify
lazy model resolution in Django:
- get_model_by_label(model_label: str)
Resolves and returns a model class from a string label like
'app_label.ModelName'.
- lazy_model(model_label: str)
Returns a `SimpleLazyObject` that lazily resolves a model using the
above utility.
These functions are useful when:
- Avoiding circular imports (e.g., in apps.py, signals.py, or settings.py)
- Dynamically referencing models by name
- Loading models safely before the app registry is fully ready
This pattern is currently re-implemented in many Django projects and
third-party packages. Including it in Django would standardize a safe,
performant, and readable approach to lazy model loading.
The get_model_by_label() function includes:
- Input validation
- Exception handling with ImproperlyConfigured
- Caching via @lru_cache to improve performance
--
Ticket URL: <
https://code.djangoproject.com/ticket/36604>
Django <
https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.