Opened 2 hours ago
Last modified 2 hours ago
#36604 assigned New feature
Add utility for lazy model resolution by string label (e.g. "app_label.ModelName")
Reported by: | Mbulelo_Peyi | Owned by: | Mbulelo_Peyi |
---|---|---|---|
Component: | Utilities | Version: | 5.2 |
Severity: | Normal | Keywords: | |
Cc: | Mbulelo_Peyi | Triage Stage: | Unreviewed |
Has patch: | no | Needs documentation: | yes |
Needs tests: | yes | Patch needs improvement: | no |
Easy pickings: | yes | UI/UX: | no |
Description
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
Note:
See TracTickets
for help on using tickets.