Opened 3 weeks ago

Closed 2 weeks ago

#36604 closed New feature (wontfix)

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 (2)

comment:1 by Mbulelo_Peyi, 3 weeks ago

Needs documentation: set
Needs tests: set

comment:2 by Sarah Boyce, 2 weeks ago

Resolution: wontfix
Status: assignedclosed

Thank you for your suggestion! When suggesting a new feature for Django, the feature idea should first be proposed and discussed with the community. To do that, please raise this on the new feature tracker.

I'll close the ticket for now, but if the community agrees with the proposal, please return to this ticket and reference the forum discussion so we can re-open it. For more information, please refer to the documented guidelines for requesting features.

Note: See TracTickets for help on using tickets.
Back to Top