mirror of
https://github.com/netbox-community/netbox.git
synced 2025-07-21 03:27:21 -06:00
Fix ConfigContext application for SiteGroups
This commit is contained in:
parent
cd629fc737
commit
12945704e9
@ -31,13 +31,15 @@ class ConfigContextQuerySet(RestrictedQuerySet):
|
|||||||
|
|
||||||
# Match against the directly assigned region as well as any parent regions.
|
# Match against the directly assigned region as well as any parent regions.
|
||||||
region = getattr(obj.site, 'region', None)
|
region = getattr(obj.site, 'region', None)
|
||||||
if region:
|
regions = region.get_ancestors(include_self=True) if region else []
|
||||||
regions = region.get_ancestors(include_self=True)
|
|
||||||
else:
|
# Match against the directly assigned site group as well as any parent site groups.
|
||||||
regions = []
|
sitegroup = getattr(obj.site, 'group', None)
|
||||||
|
sitegroups = sitegroup.get_ancestors(include_self=True) if sitegroup else []
|
||||||
|
|
||||||
queryset = self.filter(
|
queryset = self.filter(
|
||||||
Q(regions__in=regions) | Q(regions=None),
|
Q(regions__in=regions) | Q(regions=None),
|
||||||
|
Q(site_groups__in=sitegroups) | Q(site_groups=None),
|
||||||
Q(sites=obj.site) | Q(sites=None),
|
Q(sites=obj.site) | Q(sites=None),
|
||||||
Q(device_types=device_type) | Q(device_types=None),
|
Q(device_types=device_type) | Q(device_types=None),
|
||||||
Q(roles=role) | Q(roles=None),
|
Q(roles=role) | Q(roles=None),
|
||||||
@ -116,11 +118,13 @@ class ConfigContextModelQuerySet(RestrictedQuerySet):
|
|||||||
base_query.add((Q(roles=OuterRef('device_role')) | Q(roles=None)), Q.AND)
|
base_query.add((Q(roles=OuterRef('device_role')) | Q(roles=None)), Q.AND)
|
||||||
base_query.add((Q(sites=OuterRef('site')) | Q(sites=None)), Q.AND)
|
base_query.add((Q(sites=OuterRef('site')) | Q(sites=None)), Q.AND)
|
||||||
region_field = 'site__region'
|
region_field = 'site__region'
|
||||||
|
sitegroup_field = 'site__group'
|
||||||
|
|
||||||
elif self.model._meta.model_name == 'virtualmachine':
|
elif self.model._meta.model_name == 'virtualmachine':
|
||||||
base_query.add((Q(roles=OuterRef('role')) | Q(roles=None)), Q.AND)
|
base_query.add((Q(roles=OuterRef('role')) | Q(roles=None)), Q.AND)
|
||||||
base_query.add((Q(sites=OuterRef('cluster__site')) | Q(sites=None)), Q.AND)
|
base_query.add((Q(sites=OuterRef('cluster__site')) | Q(sites=None)), Q.AND)
|
||||||
region_field = 'cluster__site__region'
|
region_field = 'cluster__site__region'
|
||||||
|
sitegroup_field = 'cluster__site__group'
|
||||||
|
|
||||||
base_query.add(
|
base_query.add(
|
||||||
(Q(
|
(Q(
|
||||||
@ -132,4 +136,14 @@ class ConfigContextModelQuerySet(RestrictedQuerySet):
|
|||||||
Q.AND
|
Q.AND
|
||||||
)
|
)
|
||||||
|
|
||||||
|
base_query.add(
|
||||||
|
(Q(
|
||||||
|
site_groups__tree_id=OuterRef(f'{sitegroup_field}__tree_id'),
|
||||||
|
site_groups__level__lte=OuterRef(f'{sitegroup_field}__level'),
|
||||||
|
site_groups__lft__lte=OuterRef(f'{sitegroup_field}__lft'),
|
||||||
|
site_groups__rght__gte=OuterRef(f'{sitegroup_field}__rght'),
|
||||||
|
) | Q(site_groups=None)),
|
||||||
|
Q.AND
|
||||||
|
)
|
||||||
|
|
||||||
return base_query
|
return base_query
|
||||||
|
@ -441,7 +441,7 @@ class ConfigContextTestCase(TestCase):
|
|||||||
c.regions.set([regions[i]])
|
c.regions.set([regions[i]])
|
||||||
c.site_groups.set([site_groups[i]])
|
c.site_groups.set([site_groups[i]])
|
||||||
c.sites.set([sites[i]])
|
c.sites.set([sites[i]])
|
||||||
c.roles.set([device_types[i]])
|
c.device_types.set([device_types[i]])
|
||||||
c.roles.set([device_roles[i]])
|
c.roles.set([device_roles[i]])
|
||||||
c.platforms.set([platforms[i]])
|
c.platforms.set([platforms[i]])
|
||||||
c.cluster_groups.set([cluster_groups[i]])
|
c.cluster_groups.set([cluster_groups[i]])
|
||||||
|
Loading…
Reference in New Issue
Block a user