Skip to content

Commit b5edfa5

Browse files
pheusjeremystretch
authored andcommitted
feat(extras): Inherit ConfigContext from ancestor platforms
Apply ConfigContext to objects whose platforms descend from any assigned platform. This aligns platform behavior with regions, site groups, locations, and roles. Fixes #20639
1 parent afba5b2 commit b5edfa5

File tree

1 file changed

+14
-2
lines changed

1 file changed

+14
-2
lines changed

netbox/extras/querysets.py

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,14 +46,18 @@ def get_for_object(self, obj, aggregate_data=False):
4646
# Match against the directly assigned role as well as any parent roles.
4747
device_roles = obj.role.get_ancestors(include_self=True) if obj.role else []
4848

49+
# Match against the directly assigned platform as well as any parent platforms.
50+
platform = getattr(obj, 'platform', None)
51+
platforms = platform.get_ancestors(include_self=True) if platform else []
52+
4953
queryset = self.filter(
5054
Q(regions__in=regions) | Q(regions=None),
5155
Q(site_groups__in=sitegroups) | Q(site_groups=None),
5256
Q(sites=obj.site) | Q(sites=None),
5357
Q(locations__in=locations) | Q(locations=None),
5458
Q(device_types=device_type) | Q(device_types=None),
5559
Q(roles__in=device_roles) | Q(roles=None),
56-
Q(platforms=obj.platform) | Q(platforms=None),
60+
Q(platforms__in=platforms) | Q(platforms=None),
5761
Q(cluster_types=cluster_type) | Q(cluster_types=None),
5862
Q(cluster_groups=cluster_group) | Q(cluster_groups=None),
5963
Q(clusters=cluster) | Q(clusters=None),
@@ -103,7 +107,6 @@ def _get_config_context_filters(self):
103107
"content_type__model": self.model._meta.model_name
104108
}
105109
base_query = Q(
106-
Q(platforms=OuterRef('platform')) | Q(platforms=None),
107110
Q(cluster_types=OuterRef('cluster__type')) | Q(cluster_types=None),
108111
Q(cluster_groups=OuterRef('cluster__group')) | Q(cluster_groups=None),
109112
Q(clusters=OuterRef('cluster')) | Q(clusters=None),
@@ -167,6 +170,15 @@ def _get_config_context_filters(self):
167170
) | Q(roles=None)),
168171
Q.AND
169172
)
173+
base_query.add(
174+
(Q(
175+
platforms__tree_id=OuterRef('platform__tree_id'),
176+
platforms__level__lte=OuterRef('platform__level'),
177+
platforms__lft__lte=OuterRef('platform__lft'),
178+
platforms__rght__gte=OuterRef('platform__rght'),
179+
) | Q(platforms=None)),
180+
Q.AND
181+
)
170182

171183
return base_query
172184

0 commit comments

Comments
 (0)