1313
1414from circuits .models import Circuit , CircuitTermination
1515from extras .views import ObjectConfigContextView , ObjectRenderConfigView
16- from ipam .models import ASN , IPAddress , Prefix , VLANGroup
16+ from ipam .models import ASN , IPAddress , Prefix , VLANGroup , VLAN
1717from ipam .tables import InterfaceVLANTable , VLANTranslationRuleTable
1818from netbox .constants import DEFAULT_ACTION_PERMISSIONS
1919from netbox .views import generic
@@ -237,7 +237,7 @@ def get_extra_context(self, request, instance):
237237 'related_models' : self .get_related_models (
238238 request ,
239239 regions ,
240- omit = (Cluster , Prefix , WirelessLAN ),
240+ omit = (Cluster , CircuitTermination , Prefix , WirelessLAN ),
241241 extra = (
242242 (Location .objects .restrict (request .user , 'view' ).filter (site__region__in = regions ), 'region_id' ),
243243 (Rack .objects .restrict (request .user , 'view' ).filter (site__region__in = regions ), 'region_id' ),
@@ -247,8 +247,19 @@ def get_extra_context(self, request, instance):
247247 ).distinct (),
248248 'region_id'
249249 ),
250+ (
251+ VLANGroup .objects .restrict (request .user , 'view' ).filter (
252+ scope_type = ContentType .objects .get_for_model (Region ),
253+ scope_id__in = regions
254+ ).distinct (),
255+ 'region'
256+ ),
250257
251258 # Handle these relations manually to avoid erroneous filter name resolution
259+ (
260+ CircuitTermination .objects .restrict (request .user , 'view' ).filter (_region__in = regions ),
261+ 'region_id'
262+ ),
252263 (Cluster .objects .restrict (request .user , 'view' ).filter (_region__in = regions ), 'region_id' ),
253264 (Prefix .objects .restrict (request .user , 'view' ).filter (_region__in = regions ), 'region_id' ),
254265 (WirelessLAN .objects .restrict (request .user , 'view' ).filter (_region__in = regions ), 'region_id' ),
@@ -336,10 +347,29 @@ def get_extra_context(self, request, instance):
336347 'related_models' : self .get_related_models (
337348 request ,
338349 groups ,
339- omit = (Cluster , Prefix , WirelessLAN ),
350+ omit = (Cluster , CircuitTermination , Prefix , WirelessLAN ),
340351 extra = (
341352 (Location .objects .restrict (request .user , 'view' ).filter (site__group__in = groups ), 'site_group_id' ),
342353 (Rack .objects .restrict (request .user , 'view' ).filter (site__group__in = groups ), 'site_group_id' ),
354+ (Device .objects .restrict (request .user , 'view' ).filter (site__group__in = groups ), 'site_group_id' ),
355+ (VLAN .objects .restrict (request .user , 'view' ).filter (site__group__in = groups ), 'site_group_id' ),
356+ (
357+ ASN .objects .restrict (request .user , 'view' ).filter (
358+ sites__group__in = groups
359+ ).distinct (),
360+ 'site_group_id' ),
361+ (
362+ VirtualMachine .objects .restrict (request .user , 'view' ).filter (
363+ site__group__in = groups ),
364+ 'site_group_id'
365+ ),
366+ (
367+ VLANGroup .objects .restrict (request .user , 'view' ).filter (
368+ scope_type = ContentType .objects .get_for_model (SiteGroup ),
369+ scope_id__in = groups
370+ ).distinct (),
371+ 'site_group'
372+ ),
343373 (
344374 Circuit .objects .restrict (request .user , 'view' ).filter (
345375 terminations___site_group = instance
@@ -348,6 +378,10 @@ def get_extra_context(self, request, instance):
348378 ),
349379
350380 # Handle these relations manually to avoid erroneous filter name resolution
381+ (
382+ CircuitTermination .objects .restrict (request .user , 'view' ).filter (_site_group__in = groups ),
383+ 'site_group_id'
384+ ),
351385 (
352386 Cluster .objects .restrict (request .user , 'view' ).filter (_site_group__in = groups ),
353387 'site_group_id'
@@ -455,6 +489,7 @@ def get_extra_context(self, request, instance):
455489 (Cluster .objects .restrict (request .user , 'view' ).filter (_site = instance ), 'site_id' ),
456490 (Prefix .objects .restrict (request .user , 'view' ).filter (_site = instance ), 'site_id' ),
457491 (WirelessLAN .objects .restrict (request .user , 'view' ).filter (_site = instance ), 'site_id' ),
492+ (CircuitTermination .objects .restrict (request .user , 'view' ).filter (_site = instance ), 'site_id' ),
458493 ),
459494 ),
460495 }
@@ -539,7 +574,7 @@ def get_extra_context(self, request, instance):
539574 'related_models' : self .get_related_models (
540575 request ,
541576 locations ,
542- omit = [CableTermination , Cluster , Prefix , WirelessLAN ],
577+ omit = [CableTermination , CircuitTermination , Cluster , Prefix , WirelessLAN ],
543578 extra = (
544579 (
545580 Circuit .objects .restrict (request .user , 'view' ).filter (
@@ -549,6 +584,10 @@ def get_extra_context(self, request, instance):
549584 ),
550585
551586 # Handle these relations manually to avoid erroneous filter name resolution
587+ (
588+ CircuitTermination .objects .restrict (request .user , 'view' ).filter (_location = instance ),
589+ 'location_id'
590+ ),
552591 (Cluster .objects .restrict (request .user , 'view' ).filter (_location = instance ), 'location_id' ),
553592 (Prefix .objects .restrict (request .user , 'view' ).filter (_location = instance ), 'location_id' ),
554593 (WirelessLAN .objects .restrict (request .user , 'view' ).filter (_location = instance ), 'location_id' ),
@@ -814,7 +853,18 @@ def get_extra_context(self, request, instance):
814853 ])
815854
816855 return {
817- 'related_models' : self .get_related_models (request , instance , [CableTermination ]),
856+ 'related_models' : self .get_related_models (
857+ request ,
858+ instance ,
859+ omit = (CableTermination ,),
860+ extra = (
861+ (
862+ VLANGroup .objects .restrict (request .user , 'view' ).filter (
863+ scope_type = ContentType .objects .get_for_model (Rack ),
864+ scope_id = instance .pk
865+ ), 'rack' ),
866+ ),
867+ ),
818868 'next_rack' : next_rack ,
819869 'prev_rack' : prev_rack ,
820870 'svg_extra' : svg_extra ,
0 commit comments