mirror of
https://github.com/netbox-community/netbox.git
synced 2025-07-16 04:02:52 -06:00
This commit is contained in:
parent
248c94bd35
commit
7420c25687
@ -170,11 +170,16 @@ class ProviderNetworkView(GetRelatedModelsMixin, generic.ObjectView):
|
|||||||
'related_models': self.get_related_models(
|
'related_models': self.get_related_models(
|
||||||
request,
|
request,
|
||||||
instance,
|
instance,
|
||||||
|
omit=(CircuitTermination,),
|
||||||
extra=(
|
extra=(
|
||||||
(
|
(
|
||||||
Circuit.objects.restrict(request.user, 'view').filter(terminations___provider_network=instance),
|
Circuit.objects.restrict(request.user, 'view').filter(terminations___provider_network=instance),
|
||||||
'provider_network_id',
|
'provider_network_id',
|
||||||
),
|
),
|
||||||
|
(
|
||||||
|
CircuitTermination.objects.restrict(request.user, 'view').filter(_provider_network=instance),
|
||||||
|
'provider_network_id',
|
||||||
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
}
|
}
|
||||||
|
@ -13,7 +13,7 @@ from django.views.generic import View
|
|||||||
|
|
||||||
from circuits.models import Circuit, CircuitTermination
|
from circuits.models import Circuit, CircuitTermination
|
||||||
from extras.views import ObjectConfigContextView, ObjectRenderConfigView
|
from extras.views import ObjectConfigContextView, ObjectRenderConfigView
|
||||||
from ipam.models import ASN, IPAddress, Prefix, VLANGroup
|
from ipam.models import ASN, IPAddress, Prefix, VLANGroup, VLAN
|
||||||
from ipam.tables import InterfaceVLANTable, VLANTranslationRuleTable
|
from ipam.tables import InterfaceVLANTable, VLANTranslationRuleTable
|
||||||
from netbox.constants import DEFAULT_ACTION_PERMISSIONS
|
from netbox.constants import DEFAULT_ACTION_PERMISSIONS
|
||||||
from netbox.views import generic
|
from netbox.views import generic
|
||||||
@ -237,7 +237,7 @@ class RegionView(GetRelatedModelsMixin, generic.ObjectView):
|
|||||||
'related_models': self.get_related_models(
|
'related_models': self.get_related_models(
|
||||||
request,
|
request,
|
||||||
regions,
|
regions,
|
||||||
omit=(Cluster, Prefix, WirelessLAN),
|
omit=(Cluster, CircuitTermination, Prefix, WirelessLAN),
|
||||||
extra=(
|
extra=(
|
||||||
(Location.objects.restrict(request.user, 'view').filter(site__region__in=regions), 'region_id'),
|
(Location.objects.restrict(request.user, 'view').filter(site__region__in=regions), 'region_id'),
|
||||||
(Rack.objects.restrict(request.user, 'view').filter(site__region__in=regions), 'region_id'),
|
(Rack.objects.restrict(request.user, 'view').filter(site__region__in=regions), 'region_id'),
|
||||||
@ -247,8 +247,19 @@ class RegionView(GetRelatedModelsMixin, generic.ObjectView):
|
|||||||
).distinct(),
|
).distinct(),
|
||||||
'region_id'
|
'region_id'
|
||||||
),
|
),
|
||||||
|
(
|
||||||
|
VLANGroup.objects.restrict(request.user, 'view').filter(
|
||||||
|
scope_type=ContentType.objects.get_for_model(Region),
|
||||||
|
scope_id__in=regions
|
||||||
|
).distinct(),
|
||||||
|
'region'
|
||||||
|
),
|
||||||
|
|
||||||
# Handle these relations manually to avoid erroneous filter name resolution
|
# Handle these relations manually to avoid erroneous filter name resolution
|
||||||
|
(
|
||||||
|
CircuitTermination.objects.restrict(request.user, 'view').filter(_region__in=regions),
|
||||||
|
'region_id'
|
||||||
|
),
|
||||||
(Cluster.objects.restrict(request.user, 'view').filter(_region__in=regions), 'region_id'),
|
(Cluster.objects.restrict(request.user, 'view').filter(_region__in=regions), 'region_id'),
|
||||||
(Prefix.objects.restrict(request.user, 'view').filter(_region__in=regions), 'region_id'),
|
(Prefix.objects.restrict(request.user, 'view').filter(_region__in=regions), 'region_id'),
|
||||||
(WirelessLAN.objects.restrict(request.user, 'view').filter(_region__in=regions), 'region_id'),
|
(WirelessLAN.objects.restrict(request.user, 'view').filter(_region__in=regions), 'region_id'),
|
||||||
@ -336,10 +347,29 @@ class SiteGroupView(GetRelatedModelsMixin, generic.ObjectView):
|
|||||||
'related_models': self.get_related_models(
|
'related_models': self.get_related_models(
|
||||||
request,
|
request,
|
||||||
groups,
|
groups,
|
||||||
omit=(Cluster, Prefix, WirelessLAN),
|
omit=(Cluster, CircuitTermination, Prefix, WirelessLAN),
|
||||||
extra=(
|
extra=(
|
||||||
(Location.objects.restrict(request.user, 'view').filter(site__group__in=groups), 'site_group_id'),
|
(Location.objects.restrict(request.user, 'view').filter(site__group__in=groups), 'site_group_id'),
|
||||||
(Rack.objects.restrict(request.user, 'view').filter(site__group__in=groups), 'site_group_id'),
|
(Rack.objects.restrict(request.user, 'view').filter(site__group__in=groups), 'site_group_id'),
|
||||||
|
(Device.objects.restrict(request.user, 'view').filter(site__group__in=groups), 'site_group_id'),
|
||||||
|
(VLAN.objects.restrict(request.user, 'view').filter(site__group__in=groups), 'site_group_id'),
|
||||||
|
(
|
||||||
|
ASN.objects.restrict(request.user, 'view').filter(
|
||||||
|
sites__group__in=groups
|
||||||
|
).distinct(),
|
||||||
|
'site_group_id'),
|
||||||
|
(
|
||||||
|
VirtualMachine.objects.restrict(request.user, 'view').filter(
|
||||||
|
site__group__in=groups),
|
||||||
|
'site_group_id'
|
||||||
|
),
|
||||||
|
(
|
||||||
|
VLANGroup.objects.restrict(request.user, 'view').filter(
|
||||||
|
scope_type=ContentType.objects.get_for_model(SiteGroup),
|
||||||
|
scope_id__in=groups
|
||||||
|
).distinct(),
|
||||||
|
'site_group'
|
||||||
|
),
|
||||||
(
|
(
|
||||||
Circuit.objects.restrict(request.user, 'view').filter(
|
Circuit.objects.restrict(request.user, 'view').filter(
|
||||||
terminations___site_group=instance
|
terminations___site_group=instance
|
||||||
@ -348,6 +378,10 @@ class SiteGroupView(GetRelatedModelsMixin, generic.ObjectView):
|
|||||||
),
|
),
|
||||||
|
|
||||||
# Handle these relations manually to avoid erroneous filter name resolution
|
# Handle these relations manually to avoid erroneous filter name resolution
|
||||||
|
(
|
||||||
|
CircuitTermination.objects.restrict(request.user, 'view').filter(_site_group__in=groups),
|
||||||
|
'site_group_id'
|
||||||
|
),
|
||||||
(
|
(
|
||||||
Cluster.objects.restrict(request.user, 'view').filter(_site_group__in=groups),
|
Cluster.objects.restrict(request.user, 'view').filter(_site_group__in=groups),
|
||||||
'site_group_id'
|
'site_group_id'
|
||||||
@ -455,6 +489,7 @@ class SiteView(GetRelatedModelsMixin, generic.ObjectView):
|
|||||||
(Cluster.objects.restrict(request.user, 'view').filter(_site=instance), 'site_id'),
|
(Cluster.objects.restrict(request.user, 'view').filter(_site=instance), 'site_id'),
|
||||||
(Prefix.objects.restrict(request.user, 'view').filter(_site=instance), 'site_id'),
|
(Prefix.objects.restrict(request.user, 'view').filter(_site=instance), 'site_id'),
|
||||||
(WirelessLAN.objects.restrict(request.user, 'view').filter(_site=instance), 'site_id'),
|
(WirelessLAN.objects.restrict(request.user, 'view').filter(_site=instance), 'site_id'),
|
||||||
|
(CircuitTermination.objects.restrict(request.user, 'view').filter(_site=instance), 'site_id'),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
}
|
}
|
||||||
@ -539,7 +574,7 @@ class LocationView(GetRelatedModelsMixin, generic.ObjectView):
|
|||||||
'related_models': self.get_related_models(
|
'related_models': self.get_related_models(
|
||||||
request,
|
request,
|
||||||
locations,
|
locations,
|
||||||
omit=[CableTermination, Cluster, Prefix, WirelessLAN],
|
omit=[CableTermination, CircuitTermination, Cluster, Prefix, WirelessLAN],
|
||||||
extra=(
|
extra=(
|
||||||
(
|
(
|
||||||
Circuit.objects.restrict(request.user, 'view').filter(
|
Circuit.objects.restrict(request.user, 'view').filter(
|
||||||
@ -549,6 +584,10 @@ class LocationView(GetRelatedModelsMixin, generic.ObjectView):
|
|||||||
),
|
),
|
||||||
|
|
||||||
# Handle these relations manually to avoid erroneous filter name resolution
|
# Handle these relations manually to avoid erroneous filter name resolution
|
||||||
|
(
|
||||||
|
CircuitTermination.objects.restrict(request.user, 'view').filter(_location=instance),
|
||||||
|
'location_id'
|
||||||
|
),
|
||||||
(Cluster.objects.restrict(request.user, 'view').filter(_location=instance), 'location_id'),
|
(Cluster.objects.restrict(request.user, 'view').filter(_location=instance), 'location_id'),
|
||||||
(Prefix.objects.restrict(request.user, 'view').filter(_location=instance), 'location_id'),
|
(Prefix.objects.restrict(request.user, 'view').filter(_location=instance), 'location_id'),
|
||||||
(WirelessLAN.objects.restrict(request.user, 'view').filter(_location=instance), 'location_id'),
|
(WirelessLAN.objects.restrict(request.user, 'view').filter(_location=instance), 'location_id'),
|
||||||
@ -814,7 +853,18 @@ class RackView(GetRelatedModelsMixin, generic.ObjectView):
|
|||||||
])
|
])
|
||||||
|
|
||||||
return {
|
return {
|
||||||
'related_models': self.get_related_models(request, instance, [CableTermination]),
|
'related_models': self.get_related_models(
|
||||||
|
request,
|
||||||
|
instance,
|
||||||
|
omit=(CableTermination,),
|
||||||
|
extra=(
|
||||||
|
(
|
||||||
|
VLANGroup.objects.restrict(request.user, 'view').filter(
|
||||||
|
scope_type=ContentType.objects.get_for_model(Rack),
|
||||||
|
scope_id=instance.pk
|
||||||
|
), 'rack'),
|
||||||
|
),
|
||||||
|
),
|
||||||
'next_rack': next_rack,
|
'next_rack': next_rack,
|
||||||
'prev_rack': prev_rack,
|
'prev_rack': prev_rack,
|
||||||
'svg_extra': svg_extra,
|
'svg_extra': svg_extra,
|
||||||
|
@ -104,7 +104,17 @@ class ClusterGroupView(GetRelatedModelsMixin, generic.ObjectView):
|
|||||||
|
|
||||||
def get_extra_context(self, request, instance):
|
def get_extra_context(self, request, instance):
|
||||||
return {
|
return {
|
||||||
'related_models': self.get_related_models(request, instance),
|
'related_models': self.get_related_models(
|
||||||
|
request,
|
||||||
|
instance,
|
||||||
|
extra=(
|
||||||
|
(
|
||||||
|
VLANGroup.objects.restrict(request.user, 'view').filter(
|
||||||
|
scope_type=ContentType.objects.get_for_model(ClusterGroup),
|
||||||
|
scope_id=instance.pk
|
||||||
|
), 'cluster_group'),
|
||||||
|
),
|
||||||
|
),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user