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

Change History (1)

comment:1 by Mbulelo_Peyi, 2 hours ago

Needs documentation: set
Needs tests: set
Note: See TracTickets for help on using tickets.
Back to Top