From 903c478454e3a61a6c84df31b1bcd758590e5851 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Fri, 10 Apr 2026 17:06:56 -0400 Subject: [PATCH] Closes #21890: Deprecate the 'models' registry key --- netbox/netbox/models/features.py | 6 +++--- netbox/netbox/registry.py | 10 ++++++++++ 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/netbox/netbox/models/features.py b/netbox/netbox/models/features.py index 920c8e0c1..02365ebe9 100644 --- a/netbox/netbox/models/features.py +++ b/netbox/netbox/models/features.py @@ -722,10 +722,10 @@ def register_models(*models): for model in models: app_label, model_name = model._meta.label_lower.split('.') - # TODO: Remove in NetBox v4.5 - # Register public models + # TODO: Remove in NetBox v4.7 + # Register public models (access the underlying dict directly to avoid triggering the deprecation warning) if not getattr(model, '_netbox_private', False): - registry['models'][app_label].add(model_name) + dict.__getitem__(registry, 'models')[app_label].add(model_name) # Register applicable feature views for the model if issubclass(model, ContactsMixin): diff --git a/netbox/netbox/registry.py b/netbox/netbox/registry.py index 829d0de93..f5031abdf 100644 --- a/netbox/netbox/registry.py +++ b/netbox/netbox/registry.py @@ -9,6 +9,15 @@ class Registry(dict): removed (though the value of each key is mutable). """ def __getitem__(self, key): + # TODO: Remove in NetBox v4.7 + if key == 'models': + import warnings + warnings.warn( + 'The "models" registry key is deprecated and will be removed in NetBox v4.7. Registered models can be ' + 'obtained by calling ObjectType.objects.public().', + DeprecationWarning, + stacklevel=2, + ) try: return super().__getitem__(key) except KeyError: @@ -29,6 +38,7 @@ registry = Registry({ 'event_types': dict(), 'filtersets': dict(), 'model_features': dict(), + # TODO: Remove in NetBox v4.7 'models': collections.defaultdict(set), 'plugins': dict(), 'request_processors': list(),