13
13
14
14
from circuits .models import Circuit , CircuitTermination
15
15
from extras .views import ObjectConfigContextView , ObjectRenderConfigView
16
- from ipam .models import ASN , IPAddress , Prefix , VLANGroup
16
+ from ipam .models import ASN , IPAddress , Prefix , VLANGroup , VLAN
17
17
from ipam .tables import InterfaceVLANTable , VLANTranslationRuleTable
18
18
from netbox .constants import DEFAULT_ACTION_PERMISSIONS
19
19
from netbox .views import generic
@@ -237,7 +237,7 @@ def get_extra_context(self, request, instance):
237
237
'related_models' : self .get_related_models (
238
238
request ,
239
239
regions ,
240
- omit = (Cluster , Prefix , WirelessLAN ),
240
+ omit = (Cluster , CircuitTermination , Prefix , WirelessLAN ),
241
241
extra = (
242
242
(Location .objects .restrict (request .user , 'view' ).filter (site__region__in = regions ), 'region_id' ),
243
243
(Rack .objects .restrict (request .user , 'view' ).filter (site__region__in = regions ), 'region_id' ),
@@ -247,8 +247,19 @@ def get_extra_context(self, request, instance):
247
247
).distinct (),
248
248
'region_id'
249
249
),
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
+ ),
250
257
251
258
# 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
+ ),
252
263
(Cluster .objects .restrict (request .user , 'view' ).filter (_region__in = regions ), 'region_id' ),
253
264
(Prefix .objects .restrict (request .user , 'view' ).filter (_region__in = regions ), 'region_id' ),
254
265
(WirelessLAN .objects .restrict (request .user , 'view' ).filter (_region__in = regions ), 'region_id' ),
@@ -336,10 +347,29 @@ def get_extra_context(self, request, instance):
336
347
'related_models' : self .get_related_models (
337
348
request ,
338
349
groups ,
339
- omit = (Cluster , Prefix , WirelessLAN ),
350
+ omit = (Cluster , CircuitTermination , Prefix , WirelessLAN ),
340
351
extra = (
341
352
(Location .objects .restrict (request .user , 'view' ).filter (site__group__in = groups ), 'site_group_id' ),
342
353
(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
+ ),
343
373
(
344
374
Circuit .objects .restrict (request .user , 'view' ).filter (
345
375
terminations___site_group = instance
@@ -348,6 +378,10 @@ def get_extra_context(self, request, instance):
348
378
),
349
379
350
380
# 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
+ ),
351
385
(
352
386
Cluster .objects .restrict (request .user , 'view' ).filter (_site_group__in = groups ),
353
387
'site_group_id'
@@ -455,6 +489,7 @@ def get_extra_context(self, request, instance):
455
489
(Cluster .objects .restrict (request .user , 'view' ).filter (_site = instance ), 'site_id' ),
456
490
(Prefix .objects .restrict (request .user , 'view' ).filter (_site = instance ), 'site_id' ),
457
491
(WirelessLAN .objects .restrict (request .user , 'view' ).filter (_site = instance ), 'site_id' ),
492
+ (CircuitTermination .objects .restrict (request .user , 'view' ).filter (_site = instance ), 'site_id' ),
458
493
),
459
494
),
460
495
}
@@ -539,7 +574,7 @@ def get_extra_context(self, request, instance):
539
574
'related_models' : self .get_related_models (
540
575
request ,
541
576
locations ,
542
- omit = [CableTermination , Cluster , Prefix , WirelessLAN ],
577
+ omit = [CableTermination , CircuitTermination , Cluster , Prefix , WirelessLAN ],
543
578
extra = (
544
579
(
545
580
Circuit .objects .restrict (request .user , 'view' ).filter (
@@ -549,6 +584,10 @@ def get_extra_context(self, request, instance):
549
584
),
550
585
551
586
# 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
+ ),
552
591
(Cluster .objects .restrict (request .user , 'view' ).filter (_location = instance ), 'location_id' ),
553
592
(Prefix .objects .restrict (request .user , 'view' ).filter (_location = instance ), 'location_id' ),
554
593
(WirelessLAN .objects .restrict (request .user , 'view' ).filter (_location = instance ), 'location_id' ),
@@ -814,7 +853,18 @@ def get_extra_context(self, request, instance):
814
853
])
815
854
816
855
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
+ ),
818
868
'next_rack' : next_rack ,
819
869
'prev_rack' : prev_rack ,
820
870
'svg_extra' : svg_extra ,
0 commit comments