Fixes #2265: Include parent regions when filtering applicable ConfigContexts (credit: lampwins)

This commit is contained in:
Jeremy Stretch 2018-07-27 15:10:43 -04:00
parent acb06ee4f1
commit 7476f522e1

View File

@ -13,8 +13,15 @@ class ConfigContextQuerySet(QuerySet):
# `device_role` for Device; `role` for VirtualMachine
role = getattr(obj, 'device_role', None) or obj.role
# Match against the directly assigned region as well as any parent regions.
region = getattr(obj.site, 'region', None)
if region:
regions = region.get_ancestors(include_self=True)
else:
regions = []
return self.filter(
Q(regions=getattr(obj.site, 'region', None)) | Q(regions=None),
Q(regions__in=regions) | Q(regions=None),
Q(sites=obj.site) | Q(sites=None),
Q(roles=role) | Q(roles=None),
Q(tenants=obj.tenant) | Q(tenants=None),