Coverage for dcim/forms/filtersets.py: 100%
544 statements
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-10 18:35 +0000
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-10 18:35 +0000
1from django import forms
2from django.utils.translation import gettext_lazy as _
4from dcim.choices import *
5from dcim.constants import *
6from dcim.models import *
7from extras.forms import LocalConfigContextFilterForm
8from extras.models import ConfigTemplate
9from ipam.models import ASN, VRF, VLANTranslationPolicy
10from netbox.choices import *
11from netbox.forms import (
12 NestedGroupModelFilterSetForm,
13 NetBoxModelFilterSetForm,
14 OrganizationalModelFilterSetForm,
15 PrimaryModelFilterSetForm,
16)
17from netbox.forms.mixins import OwnerFilterMixin
18from tenancy.forms import ContactModelFilterForm, TenancyFilterForm
19from tenancy.models import Tenant
20from users.models import User
21from utilities.forms import BOOLEAN_WITH_BLANK_CHOICES, FilterForm, add_blank_choice
22from utilities.forms.fields import (
23 ColorField,
24 DynamicModelMultipleChoiceField,
25 PositiveBigIntegerField,
26 TagFilterField,
27)
28from utilities.forms.rendering import FieldSet
29from utilities.forms.widgets import DatePicker, NumberWithOptions
30from virtualization.models import Cluster, ClusterGroup, VirtualMachine
31from vpn.models import L2VPN
32from wireless.choices import *
34__all__ = (
35 'CableBundleFilterForm',
36 'CableFilterForm',
37 'ConsoleConnectionFilterForm',
38 'ConsolePortFilterForm',
39 'ConsolePortTemplateFilterForm',
40 'ConsoleServerPortFilterForm',
41 'ConsoleServerPortTemplateFilterForm',
42 'CoolingFeedFilterForm',
43 'CoolingIntakeFilterForm',
44 'CoolingIntakeTemplateFilterForm',
45 'CoolingOutflowFilterForm',
46 'CoolingOutflowTemplateFilterForm',
47 'CoolingSourceFilterForm',
48 'DeviceBayFilterForm',
49 'DeviceBayTemplateFilterForm',
50 'DeviceFilterForm',
51 'DeviceRoleFilterForm',
52 'DeviceTypeFilterForm',
53 'FrontPortFilterForm',
54 'FrontPortTemplateFilterForm',
55 'InterfaceConnectionFilterForm',
56 'InterfaceFilterForm',
57 'InterfaceTemplateFilterForm',
58 'InventoryItemFilterForm',
59 'InventoryItemRoleFilterForm',
60 'InventoryItemTemplateFilterForm',
61 'LocationFilterForm',
62 'MACAddressFilterForm',
63 'ManufacturerFilterForm',
64 'ModuleBayFilterForm',
65 'ModuleBayTemplateFilterForm',
66 'ModuleBayTypeFilterForm',
67 'ModuleFilterForm',
68 'ModuleTypeFilterForm',
69 'ModuleTypeProfileFilterForm',
70 'PlatformFilterForm',
71 'PowerConnectionFilterForm',
72 'PowerFeedFilterForm',
73 'PowerOutletFilterForm',
74 'PowerOutletTemplateFilterForm',
75 'PowerPanelFilterForm',
76 'PowerPortFilterForm',
77 'PowerPortTemplateFilterForm',
78 'RackElevationFilterForm',
79 'RackFilterForm',
80 'RackGroupFilterForm',
81 'RackReservationFilterForm',
82 'RackRoleFilterForm',
83 'RackTypeFilterForm',
84 'RearPortFilterForm',
85 'RearPortTemplateFilterForm',
86 'RegionFilterForm',
87 'SiteFilterForm',
88 'SiteGroupFilterForm',
89 'VirtualChassisFilterForm',
90 'VirtualDeviceContextFilterForm',
91)
94class DeviceComponentFilterForm(OwnerFilterMixin, NetBoxModelFilterSetForm):
95 name = forms.CharField(
96 label=_('Name'),
97 required=False
98 )
99 label = forms.CharField(
100 label=_('Label'),
101 required=False
102 )
103 region_id = DynamicModelMultipleChoiceField(
104 queryset=Region.objects.all(),
105 required=False,
106 label=_('Region')
107 )
108 site_group_id = DynamicModelMultipleChoiceField(
109 queryset=SiteGroup.objects.all(),
110 required=False,
111 label=_('Site group')
112 )
113 site_id = DynamicModelMultipleChoiceField(
114 queryset=Site.objects.all(),
115 required=False,
116 query_params={
117 'region_id': '$region_id',
118 'group_id': '$site_group_id',
119 },
120 label=_('Site')
121 )
122 location_id = DynamicModelMultipleChoiceField(
123 queryset=Location.objects.all(),
124 required=False,
125 query_params={
126 'site_id': '$site_id',
127 },
128 label=_('Location')
129 )
130 rack_id = DynamicModelMultipleChoiceField(
131 queryset=Rack.objects.all(),
132 required=False,
133 query_params={
134 'site_id': '$site_id',
135 'location_id': '$location_id',
136 },
137 label=_('Rack')
138 )
139 virtual_chassis_id = DynamicModelMultipleChoiceField(
140 queryset=VirtualChassis.objects.all(),
141 required=False,
142 label=_('Virtual Chassis')
143 )
144 device_type_id = DynamicModelMultipleChoiceField(
145 queryset=DeviceType.objects.all(),
146 required=False,
147 label=_('Device type')
148 )
149 device_role_id = DynamicModelMultipleChoiceField(
150 queryset=DeviceRole.objects.all(),
151 required=False,
152 label=_('Device role')
153 )
154 tenant_id = DynamicModelMultipleChoiceField(
155 queryset=Tenant.objects.all(),
156 required=False,
157 label=_('Tenant')
158 )
159 device_id = DynamicModelMultipleChoiceField(
160 queryset=Device.objects.all(),
161 required=False,
162 query_params={
163 'site_id': '$site_id',
164 'location_id': '$location_id',
165 'virtual_chassis_id': '$virtual_chassis_id',
166 'device_type_id': '$device_type_id',
167 'role_id': '$role_id',
168 'tenant_id': '$tenant_id'
169 },
170 label=_('Device')
171 )
172 device_status = forms.MultipleChoiceField(
173 choices=DeviceStatusChoices,
174 required=False,
175 label=_('Device Status'),
176 )
179class RegionFilterForm(ContactModelFilterForm, NestedGroupModelFilterSetForm):
180 model = Region
181 fieldsets = (
182 FieldSet('q', 'filter_id', 'tag'),
183 FieldSet('parent_id', name=_('Region')),
184 FieldSet('owner_group_id', 'owner_id', name=_('Ownership')),
185 FieldSet('contact', 'contact_role', 'contact_group', name=_('Contacts'))
186 )
187 parent_id = DynamicModelMultipleChoiceField(
188 queryset=Region.objects.all(),
189 required=False,
190 label=_('Parent region')
191 )
192 tag = TagFilterField(model)
195class SiteGroupFilterForm(ContactModelFilterForm, NestedGroupModelFilterSetForm):
196 model = SiteGroup
197 fieldsets = (
198 FieldSet('q', 'filter_id', 'tag'),
199 FieldSet('parent_id', name=_('Site Group')),
200 FieldSet('owner_group_id', 'owner_id', name=_('Ownership')),
201 FieldSet('contact', 'contact_role', 'contact_group', name=_('Contacts'))
202 )
203 parent_id = DynamicModelMultipleChoiceField(
204 queryset=SiteGroup.objects.all(),
205 required=False,
206 label=_('Parent group')
207 )
208 tag = TagFilterField(model)
211class SiteFilterForm(TenancyFilterForm, ContactModelFilterForm, PrimaryModelFilterSetForm):
212 model = Site
213 fieldsets = (
214 FieldSet('q', 'filter_id', 'tag'),
215 FieldSet('status', 'region_id', 'group_id', 'asn_id', name=_('Attributes')),
216 FieldSet('tenant_group_id', 'tenant_id', name=_('Tenant')),
217 FieldSet('owner_group_id', 'owner_id', name=_('Ownership')),
218 FieldSet('contact', 'contact_role', 'contact_group', name=_('Contacts')),
219 )
220 selector_fields = ('filter_id', 'q', 'region_id', 'group_id')
221 status = forms.MultipleChoiceField(
222 label=_('Status'),
223 choices=SiteStatusChoices,
224 required=False
225 )
226 region_id = DynamicModelMultipleChoiceField(
227 queryset=Region.objects.all(),
228 required=False,
229 label=_('Region')
230 )
231 group_id = DynamicModelMultipleChoiceField(
232 queryset=SiteGroup.objects.all(),
233 required=False,
234 label=_('Site group')
235 )
236 asn_id = DynamicModelMultipleChoiceField(
237 queryset=ASN.objects.all(),
238 required=False,
239 label=_('ASNs')
240 )
241 tag = TagFilterField(model)
244class LocationFilterForm(TenancyFilterForm, ContactModelFilterForm, NestedGroupModelFilterSetForm):
245 model = Location
246 fieldsets = (
247 FieldSet('q', 'filter_id', 'tag'),
248 FieldSet('region_id', 'site_group_id', 'site_id', 'parent_id', 'status', 'facility', name=_('Attributes')),
249 FieldSet('tenant_group_id', 'tenant_id', name=_('Tenant')),
250 FieldSet('owner_group_id', 'owner_id', name=_('Ownership')),
251 FieldSet('contact', 'contact_role', 'contact_group', name=_('Contacts')),
252 )
253 region_id = DynamicModelMultipleChoiceField(
254 queryset=Region.objects.all(),
255 required=False,
256 label=_('Region')
257 )
258 site_group_id = DynamicModelMultipleChoiceField(
259 queryset=SiteGroup.objects.all(),
260 required=False,
261 label=_('Site group')
262 )
263 site_id = DynamicModelMultipleChoiceField(
264 queryset=Site.objects.all(),
265 required=False,
266 query_params={
267 'region_id': '$region_id',
268 'group_id': '$site_group_id',
269 },
270 label=_('Site')
271 )
272 parent_id = DynamicModelMultipleChoiceField(
273 queryset=Location.objects.all(),
274 required=False,
275 query_params={
276 'region_id': '$region_id',
277 'site_id': '$site_id',
278 },
279 label=_('Parent')
280 )
281 status = forms.MultipleChoiceField(
282 label=_('Status'),
283 choices=LocationStatusChoices,
284 required=False
285 )
286 facility = forms.CharField(
287 label=_('Facility'),
288 required=False
289 )
290 tag = TagFilterField(model)
293class RackGroupFilterForm(OrganizationalModelFilterSetForm):
294 model = RackGroup
295 fieldsets = (
296 FieldSet('q', 'filter_id', 'tag'),
297 FieldSet('owner_group_id', 'owner_id', name=_('Ownership')),
298 )
299 tag = TagFilterField(model)
302class RackRoleFilterForm(OrganizationalModelFilterSetForm):
303 model = RackRole
304 fieldsets = (
305 FieldSet('q', 'filter_id', 'tag'),
306 FieldSet('owner_group_id', 'owner_id', name=_('Ownership')),
307 )
308 tag = TagFilterField(model)
311class RackBaseFilterForm(PrimaryModelFilterSetForm):
312 form_factor = forms.MultipleChoiceField(
313 label=_('Form factor'),
314 choices=RackFormFactorChoices,
315 required=False
316 )
317 width = forms.MultipleChoiceField(
318 label=_('Width'),
319 choices=RackWidthChoices,
320 required=False
321 )
322 u_height = forms.IntegerField(
323 required=False,
324 min_value=1
325 )
326 starting_unit = forms.IntegerField(
327 required=False,
328 min_value=1
329 )
330 desc_units = forms.NullBooleanField(
331 required=False,
332 label=_('Descending units'),
333 widget=forms.Select(
334 choices=BOOLEAN_WITH_BLANK_CHOICES
335 )
336 )
337 weight = forms.DecimalField(
338 label=_('Weight'),
339 required=False,
340 min_value=1
341 )
342 max_weight = forms.IntegerField(
343 label=_('Max weight'),
344 required=False,
345 min_value=1
346 )
347 weight_unit = forms.ChoiceField(
348 label=_('Weight unit'),
349 choices=add_blank_choice(WeightUnitChoices),
350 required=False
351 )
352 cooling_capability = forms.MultipleChoiceField(
353 label=_('Cooling capability'),
354 choices=RackCoolingCapabilityChoices,
355 required=False
356 )
357 cooling_capacity = forms.DecimalField(
358 label=_('Cooling capacity'),
359 required=False,
360 min_value=0
361 )
364class RackTypeFilterForm(RackBaseFilterForm):
365 model = RackType
366 fieldsets = (
367 FieldSet('q', 'filter_id', 'tag'),
368 FieldSet('manufacturer_id', 'form_factor', 'width', 'u_height', 'rack_count', name=_('Rack Type')),
369 FieldSet('starting_unit', 'desc_units', name=_('Numbering')),
370 FieldSet('weight', 'max_weight', 'weight_unit', name=_('Weight')),
371 FieldSet('cooling_capability', 'cooling_capacity', name=_('Cooling')),
372 FieldSet('owner_group_id', 'owner_id', name=_('Ownership')),
373 )
374 selector_fields = ('filter_id', 'q', 'manufacturer_id')
375 manufacturer_id = DynamicModelMultipleChoiceField(
376 queryset=Manufacturer.objects.all(),
377 required=False,
378 label=_('Manufacturer')
379 )
380 rack_count = forms.IntegerField(
381 label=_('Rack count'),
382 required=False,
383 min_value=0,
384 )
385 tag = TagFilterField(model)
388class RackFilterForm(TenancyFilterForm, ContactModelFilterForm, RackBaseFilterForm):
389 model = Rack
390 fieldsets = (
391 FieldSet('q', 'filter_id', 'tag'),
392 FieldSet('region_id', 'site_group_id', 'site_id', 'location_id', 'group_id', name=_('Location')),
393 FieldSet('status', 'role_id', 'manufacturer_id', 'rack_type_id', 'serial', 'asset_tag', name=_('Rack')),
394 FieldSet('form_factor', 'width', 'u_height', 'airflow', name=_('Hardware')),
395 FieldSet('cooling_capability', 'cooling_capacity', name=_('Cooling')),
396 FieldSet('starting_unit', 'desc_units', name=_('Numbering')),
397 FieldSet('weight', 'max_weight', 'weight_unit', name=_('Weight')),
398 FieldSet('tenant_group_id', 'tenant_id', name=_('Tenant')),
399 FieldSet('owner_group_id', 'owner_id', name=_('Ownership')),
400 FieldSet('contact', 'contact_role', 'contact_group', name=_('Contacts')),
401 )
402 selector_fields = ('filter_id', 'q', 'region_id', 'site_group_id', 'site_id', 'location_id')
403 region_id = DynamicModelMultipleChoiceField(
404 queryset=Region.objects.all(),
405 required=False,
406 label=_('Region')
407 )
408 site_id = DynamicModelMultipleChoiceField(
409 queryset=Site.objects.all(),
410 required=False,
411 query_params={
412 'region_id': '$region_id'
413 },
414 label=_('Site')
415 )
416 site_group_id = DynamicModelMultipleChoiceField(
417 queryset=SiteGroup.objects.all(),
418 required=False,
419 label=_('Site group')
420 )
421 location_id = DynamicModelMultipleChoiceField(
422 queryset=Location.objects.all(),
423 required=False,
424 null_option='None',
425 query_params={
426 'site_id': '$site_id'
427 },
428 label=_('Location')
429 )
430 group_id = DynamicModelMultipleChoiceField(
431 queryset=RackGroup.objects.all(),
432 required=False,
433 null_option='None',
434 label=_('Rack group')
435 )
436 status = forms.MultipleChoiceField(
437 label=_('Status'),
438 choices=RackStatusChoices,
439 required=False
440 )
441 role_id = DynamicModelMultipleChoiceField(
442 queryset=RackRole.objects.all(),
443 required=False,
444 null_option='None',
445 label=_('Role')
446 )
447 manufacturer_id = DynamicModelMultipleChoiceField(
448 queryset=Manufacturer.objects.all(),
449 required=False,
450 label=_('Manufacturer')
451 )
452 rack_type_id = DynamicModelMultipleChoiceField(
453 queryset=RackType.objects.all(),
454 required=False,
455 query_params={
456 'manufacturer_id': '$manufacturer_id'
457 },
458 label=_('Rack type')
459 )
460 airflow = forms.MultipleChoiceField(
461 label=_('Airflow'),
462 choices=add_blank_choice(RackAirflowChoices),
463 required=False
464 )
465 serial = forms.CharField(
466 label=_('Serial'),
467 required=False
468 )
469 asset_tag = forms.CharField(
470 label=_('Asset tag'),
471 required=False
472 )
473 tag = TagFilterField(model)
476class RackElevationFilterForm(RackFilterForm):
477 fieldsets = (
478 FieldSet('q', 'filter_id', 'tag'),
479 FieldSet('region_id', 'site_group_id', 'site_id', 'location_id', 'group_id', 'id', name=_('Location')),
480 FieldSet('status', 'role_id', name=_('Function')),
481 FieldSet('type', 'width', 'serial', 'asset_tag', name=_('Hardware')),
482 FieldSet('weight', 'max_weight', 'weight_unit', name=_('Weight')),
483 FieldSet('tenant_group_id', 'tenant_id', name=_('Tenant')),
484 FieldSet('owner_group_id', 'owner_id', name=_('Ownership')),
485 FieldSet('contact', 'contact_role', 'contact_group', name=_('Contacts')),
486 )
487 id = DynamicModelMultipleChoiceField(
488 queryset=Rack.objects.all(),
489 label=_('Rack'),
490 required=False,
491 query_params={
492 'site_id': '$site_id',
493 'location_id': '$location_id',
494 }
495 )
498class RackReservationFilterForm(TenancyFilterForm, PrimaryModelFilterSetForm):
499 model = RackReservation
500 fieldsets = (
501 FieldSet('q', 'filter_id', 'tag'),
502 FieldSet('status', 'user_id', 'unit_count_min', 'unit_count_max', name=_('Reservation')),
503 FieldSet('region_id', 'site_group_id', 'site_id', 'location_id', 'group_id', 'rack_id', name=_('Rack')),
504 FieldSet('tenant_group_id', 'tenant_id', name=_('Tenant')),
505 FieldSet('owner_group_id', 'owner_id', name=_('Ownership')),
506 )
507 region_id = DynamicModelMultipleChoiceField(
508 queryset=Region.objects.all(),
509 required=False,
510 label=_('Region')
511 )
512 site_group_id = DynamicModelMultipleChoiceField(
513 queryset=SiteGroup.objects.all(),
514 required=False,
515 label=_('Site group')
516 )
517 site_id = DynamicModelMultipleChoiceField(
518 queryset=Site.objects.all(),
519 required=False,
520 query_params={
521 'region_id': '$region_id',
522 'group_id': '$site_group_id',
523 },
524 label=_('Site')
525 )
526 location_id = DynamicModelMultipleChoiceField(
527 queryset=Location.objects.all(),
528 required=False,
529 query_params={
530 'site_id': '$site_id',
531 },
532 label=_('Location'),
533 null_option='None'
534 )
535 group_id = DynamicModelMultipleChoiceField(
536 queryset=RackGroup.objects.all(),
537 required=False,
538 null_option='None',
539 label=_('Rack group')
540 )
541 rack_id = DynamicModelMultipleChoiceField(
542 queryset=Rack.objects.all(),
543 required=False,
544 query_params={
545 'group_id': '$group_id',
546 'site_id': '$site_id',
547 'location_id': '$location_id',
548 },
549 label=_('Rack')
550 )
551 status = forms.MultipleChoiceField(
552 label=_('Status'),
553 choices=RackReservationStatusChoices,
554 required=False
555 )
556 user_id = DynamicModelMultipleChoiceField(
557 queryset=User.objects.all(),
558 required=False,
559 label=_('User')
560 )
561 unit_count_min = forms.IntegerField(
562 required=False,
563 label=_("Minimum U's")
564 )
565 unit_count_max = forms.IntegerField(
566 required=False,
567 label=_("Maximum U's")
568 )
569 tag = TagFilterField(model)
572class ManufacturerFilterForm(ContactModelFilterForm, OrganizationalModelFilterSetForm):
573 model = Manufacturer
574 fieldsets = (
575 FieldSet('q', 'filter_id', 'tag'),
576 FieldSet('owner_group_id', 'owner_id', name=_('Ownership')),
577 FieldSet('contact', 'contact_role', 'contact_group', name=_('Contacts'))
578 )
579 tag = TagFilterField(model)
582class DeviceTypeFilterForm(PrimaryModelFilterSetForm):
583 model = DeviceType
584 fieldsets = (
585 FieldSet('q', 'filter_id', 'tag'),
586 FieldSet(
587 'manufacturer_id', 'default_platform_id', 'part_number', 'device_count',
588 'subdevice_role', name=_('Hardware')
589 ),
590 FieldSet('cooling_method', 'airflow', name=_('Cooling')),
591 FieldSet('has_front_image', 'has_rear_image', name=_('Images')),
592 FieldSet(
593 'console_ports', 'console_server_ports', 'power_ports', 'power_outlets', 'interfaces',
594 'pass_through_ports', 'device_bays', 'module_bays', 'inventory_items', name=_('Components')
595 ),
596 FieldSet('weight', 'weight_unit', name=_('Weight')),
597 FieldSet('end_of_life__gte', 'end_of_life__lte', name=_('Lifecycle')),
598 FieldSet('owner_group_id', 'owner_id', name=_('Ownership')),
599 )
600 selector_fields = ('filter_id', 'q', 'manufacturer_id')
601 manufacturer_id = DynamicModelMultipleChoiceField(
602 queryset=Manufacturer.objects.all(),
603 required=False,
604 label=_('Manufacturer')
605 )
606 default_platform_id = DynamicModelMultipleChoiceField(
607 queryset=Platform.objects.all(),
608 required=False,
609 label=_('Default platform')
610 )
611 part_number = forms.CharField(
612 label=_('Part number'),
613 required=False
614 )
615 device_count = forms.IntegerField(
616 label=_('Device count'),
617 required=False,
618 min_value=0,
619 )
620 subdevice_role = forms.MultipleChoiceField(
621 label=_('Subdevice role'),
622 choices=add_blank_choice(SubdeviceRoleChoices),
623 required=False
624 )
625 airflow = forms.MultipleChoiceField(
626 label=_('Airflow'),
627 choices=add_blank_choice(DeviceAirflowChoices),
628 required=False
629 )
630 cooling_method = forms.MultipleChoiceField(
631 label=_('Cooling method'),
632 choices=add_blank_choice(CoolingMethodChoices),
633 required=False
634 )
635 has_front_image = forms.NullBooleanField(
636 required=False,
637 label=_('Has a front image'),
638 widget=forms.Select(
639 choices=BOOLEAN_WITH_BLANK_CHOICES
640 )
641 )
642 has_rear_image = forms.NullBooleanField(
643 required=False,
644 label=_('Has a rear image'),
645 widget=forms.Select(
646 choices=BOOLEAN_WITH_BLANK_CHOICES
647 )
648 )
649 console_ports = forms.NullBooleanField(
650 required=False,
651 label=_('Has console ports'),
652 widget=forms.Select(
653 choices=BOOLEAN_WITH_BLANK_CHOICES
654 )
655 )
656 console_server_ports = forms.NullBooleanField(
657 required=False,
658 label=_('Has console server ports'),
659 widget=forms.Select(
660 choices=BOOLEAN_WITH_BLANK_CHOICES
661 )
662 )
663 power_ports = forms.NullBooleanField(
664 required=False,
665 label=_('Has power ports'),
666 widget=forms.Select(
667 choices=BOOLEAN_WITH_BLANK_CHOICES
668 )
669 )
670 power_outlets = forms.NullBooleanField(
671 required=False,
672 label=_('Has power outlets'),
673 widget=forms.Select(
674 choices=BOOLEAN_WITH_BLANK_CHOICES
675 )
676 )
677 interfaces = forms.NullBooleanField(
678 required=False,
679 label=_('Has interfaces'),
680 widget=forms.Select(
681 choices=BOOLEAN_WITH_BLANK_CHOICES
682 )
683 )
684 pass_through_ports = forms.NullBooleanField(
685 required=False,
686 label=_('Has pass-through ports'),
687 widget=forms.Select(
688 choices=BOOLEAN_WITH_BLANK_CHOICES
689 )
690 )
691 device_bays = forms.NullBooleanField(
692 required=False,
693 label=_('Has device bays'),
694 widget=forms.Select(
695 choices=BOOLEAN_WITH_BLANK_CHOICES
696 )
697 )
698 module_bays = forms.NullBooleanField(
699 required=False,
700 label=_('Has module bays'),
701 widget=forms.Select(
702 choices=BOOLEAN_WITH_BLANK_CHOICES
703 )
704 )
705 inventory_items = forms.NullBooleanField(
706 required=False,
707 label=_('Has inventory items'),
708 widget=forms.Select(
709 choices=BOOLEAN_WITH_BLANK_CHOICES
710 )
711 )
712 tag = TagFilterField(model)
713 weight = forms.DecimalField(
714 label=_('Weight'),
715 required=False
716 )
717 weight_unit = forms.ChoiceField(
718 label=_('Weight unit'),
719 choices=add_blank_choice(WeightUnitChoices),
720 required=False
721 )
722 end_of_life__gte = forms.DateField(
723 label=_('End of life after'),
724 required=False,
725 widget=DatePicker()
726 )
727 end_of_life__lte = forms.DateField(
728 label=_('End of life before'),
729 required=False,
730 widget=DatePicker()
731 )
734class ModuleBayTypeFilterForm(PrimaryModelFilterSetForm):
735 model = ModuleBayType
736 fieldsets = (
737 FieldSet('q', 'filter_id', 'tag'),
738 FieldSet('manufacturer_id', 'color', name=_('Module Bay Type')),
739 FieldSet('owner_group_id', 'owner_id', name=_('Ownership')),
740 )
741 selector_fields = ('filter_id', 'q', 'manufacturer_id')
742 manufacturer_id = DynamicModelMultipleChoiceField(
743 queryset=Manufacturer.objects.all(),
744 required=False,
745 label=_('Manufacturer')
746 )
747 color = ColorField(
748 label=_('Color'),
749 required=False,
750 )
751 tag = TagFilterField(model)
754class ModuleTypeProfileFilterForm(PrimaryModelFilterSetForm):
755 model = ModuleTypeProfile
756 fieldsets = (
757 FieldSet('q', 'filter_id', 'tag'),
758 FieldSet('owner_group_id', 'owner_id', name=_('Ownership')),
759 )
760 selector_fields = ('filter_id', 'q')
761 tag = TagFilterField(model)
764class ModuleTypeFilterForm(PrimaryModelFilterSetForm):
765 model = ModuleType
766 fieldsets = (
767 FieldSet('q', 'filter_id', 'tag'),
768 FieldSet(
769 'profile_id', 'manufacturer_id', 'part_number', 'module_count',
770 'module_bay_type_id', name=_('Hardware')
771 ),
772 FieldSet('cooling_method', 'airflow', name=_('Cooling')),
773 FieldSet(
774 'console_ports', 'console_server_ports', 'power_ports', 'power_outlets', 'interfaces',
775 'pass_through_ports', 'module_bays', name=_('Components')
776 ),
777 FieldSet('weight', 'weight_unit', name=_('Weight')),
778 FieldSet('end_of_life__gte', 'end_of_life__lte', name=_('Lifecycle')),
779 FieldSet('owner_group_id', 'owner_id', name=_('Ownership')),
780 )
781 selector_fields = ('filter_id', 'q', 'manufacturer_id')
782 profile_id = DynamicModelMultipleChoiceField(
783 queryset=ModuleTypeProfile.objects.all(),
784 required=False,
785 null_option='None',
786 label=_('Profile')
787 )
788 manufacturer_id = DynamicModelMultipleChoiceField(
789 queryset=Manufacturer.objects.all(),
790 required=False,
791 label=_('Manufacturer')
792 )
793 module_bay_type_id = DynamicModelMultipleChoiceField(
794 queryset=ModuleBayType.objects.all(),
795 required=False,
796 null_option='None',
797 label=_('Module bay type')
798 )
799 part_number = forms.CharField(
800 label=_('Part number'),
801 required=False
802 )
803 module_count = forms.IntegerField(
804 label=_('Module count'),
805 required=False,
806 min_value=0,
807 )
808 console_ports = forms.NullBooleanField(
809 required=False,
810 label=_('Has console ports'),
811 widget=forms.Select(
812 choices=BOOLEAN_WITH_BLANK_CHOICES
813 )
814 )
815 console_server_ports = forms.NullBooleanField(
816 required=False,
817 label=_('Has console server ports'),
818 widget=forms.Select(
819 choices=BOOLEAN_WITH_BLANK_CHOICES
820 )
821 )
822 power_ports = forms.NullBooleanField(
823 required=False,
824 label=_('Has power ports'),
825 widget=forms.Select(
826 choices=BOOLEAN_WITH_BLANK_CHOICES
827 )
828 )
829 power_outlets = forms.NullBooleanField(
830 required=False,
831 label=_('Has power outlets'),
832 widget=forms.Select(
833 choices=BOOLEAN_WITH_BLANK_CHOICES
834 )
835 )
836 interfaces = forms.NullBooleanField(
837 required=False,
838 label=_('Has interfaces'),
839 widget=forms.Select(
840 choices=BOOLEAN_WITH_BLANK_CHOICES
841 )
842 )
843 pass_through_ports = forms.NullBooleanField(
844 required=False,
845 label=_('Has pass-through ports'),
846 widget=forms.Select(
847 choices=BOOLEAN_WITH_BLANK_CHOICES
848 )
849 )
850 module_bays = forms.NullBooleanField(
851 required=False,
852 label=_('Has module bays'),
853 widget=forms.Select(
854 choices=BOOLEAN_WITH_BLANK_CHOICES
855 )
856 )
857 tag = TagFilterField(model)
858 airflow = forms.MultipleChoiceField(
859 label=_('Airflow'),
860 choices=add_blank_choice(ModuleAirflowChoices),
861 required=False
862 )
863 cooling_method = forms.MultipleChoiceField(
864 label=_('Cooling method'),
865 choices=add_blank_choice(CoolingMethodChoices),
866 required=False
867 )
868 weight = forms.DecimalField(
869 label=_('Weight'),
870 required=False
871 )
872 weight_unit = forms.ChoiceField(
873 label=_('Weight unit'),
874 choices=add_blank_choice(WeightUnitChoices),
875 required=False
876 )
877 end_of_life__gte = forms.DateField(
878 label=_('End of life after'),
879 required=False,
880 widget=DatePicker()
881 )
882 end_of_life__lte = forms.DateField(
883 label=_('End of life before'),
884 required=False,
885 widget=DatePicker()
886 )
889class DeviceRoleFilterForm(NestedGroupModelFilterSetForm):
890 model = DeviceRole
891 fieldsets = (
892 FieldSet('q', 'filter_id', 'tag'),
893 FieldSet('parent_id', 'config_template_id', name=_('Device Role')),
894 FieldSet('owner_group_id', 'owner_id', name=_('Ownership')),
895 )
896 config_template_id = DynamicModelMultipleChoiceField(
897 queryset=ConfigTemplate.objects.all(),
898 required=False,
899 label=_('Config template')
900 )
901 parent_id = DynamicModelMultipleChoiceField(
902 queryset=DeviceRole.objects.all(),
903 required=False,
904 label=_('Parent')
905 )
906 tag = TagFilterField(model)
909class PlatformFilterForm(NestedGroupModelFilterSetForm):
910 model = Platform
911 fieldsets = (
912 FieldSet('q', 'filter_id', 'tag'),
913 FieldSet('manufacturer_id', 'parent_id', 'config_template_id', name=_('Platform')),
914 FieldSet('owner_group_id', 'owner_id', name=_('Ownership')),
915 )
916 selector_fields = ('filter_id', 'q', 'manufacturer_id')
917 parent_id = DynamicModelMultipleChoiceField(
918 queryset=Platform.objects.all(),
919 required=False,
920 label=_('Parent')
921 )
922 manufacturer_id = DynamicModelMultipleChoiceField(
923 queryset=Manufacturer.objects.all(),
924 required=False,
925 label=_('Manufacturer')
926 )
927 config_template_id = DynamicModelMultipleChoiceField(
928 queryset=ConfigTemplate.objects.all(),
929 required=False,
930 label=_('Config template')
931 )
932 tag = TagFilterField(model)
935class DeviceFilterForm(
936 LocalConfigContextFilterForm,
937 TenancyFilterForm,
938 ContactModelFilterForm,
939 PrimaryModelFilterSetForm
940):
941 model = Device
942 fieldsets = (
943 FieldSet('q', 'filter_id', 'tag'),
944 FieldSet('region_id', 'site_group_id', 'site_id', 'location_id', 'rack_id', name=_('Location')),
945 FieldSet('status', 'role_id', 'serial', 'asset_tag', 'mac_address', name=_('Operation')),
946 FieldSet('manufacturer_id', 'device_type_id', 'platform_id', name=_('Hardware')),
947 FieldSet('cooling_method', 'airflow', name=_('Cooling')),
948 FieldSet('tenant_group_id', 'tenant_id', name=_('Tenant')),
949 FieldSet('owner_group_id', 'owner_id', name=_('Ownership')),
950 FieldSet('contact', 'contact_role', 'contact_group', name=_('Contacts')),
951 FieldSet(
952 'console_ports', 'console_server_ports', 'power_ports', 'power_outlets', 'interfaces', 'pass_through_ports',
953 name=_('Components')
954 ),
955 FieldSet('cluster_group_id', 'cluster_id', name=_('Cluster')),
956 FieldSet(
957 'has_primary_ip', 'has_oob_ip', 'virtual_chassis_member', 'config_template_id', 'local_context_data',
958 'has_virtual_device_context',
959 name=_('Miscellaneous')
960 )
961 )
962 selector_fields = ('filter_id', 'q', 'region_id', 'site_group_id', 'site_id', 'location_id', 'rack_id')
963 region_id = DynamicModelMultipleChoiceField(
964 queryset=Region.objects.all(),
965 required=False,
966 label=_('Region')
967 )
968 site_group_id = DynamicModelMultipleChoiceField(
969 queryset=SiteGroup.objects.all(),
970 required=False,
971 label=_('Site group')
972 )
973 site_id = DynamicModelMultipleChoiceField(
974 queryset=Site.objects.all(),
975 required=False,
976 query_params={
977 'region_id': '$region_id',
978 'group_id': '$site_group_id',
979 },
980 label=_('Site')
981 )
982 location_id = DynamicModelMultipleChoiceField(
983 queryset=Location.objects.all(),
984 required=False,
985 null_option='None',
986 query_params={
987 'site_id': '$site_id'
988 },
989 label=_('Location')
990 )
991 rack_id = DynamicModelMultipleChoiceField(
992 queryset=Rack.objects.all(),
993 required=False,
994 null_option='None',
995 query_params={
996 'site_id': '$site_id',
997 'location_id': '$location_id',
998 },
999 label=_('Rack')
1000 )
1001 role_id = DynamicModelMultipleChoiceField(
1002 queryset=DeviceRole.objects.all(),
1003 required=False,
1004 label=_('Role')
1005 )
1006 manufacturer_id = DynamicModelMultipleChoiceField(
1007 queryset=Manufacturer.objects.all(),
1008 required=False,
1009 label=_('Manufacturer')
1010 )
1011 device_type_id = DynamicModelMultipleChoiceField(
1012 queryset=DeviceType.objects.all(),
1013 required=False,
1014 query_params={
1015 'manufacturer_id': '$manufacturer_id'
1016 },
1017 label=_('Model')
1018 )
1019 platform_id = DynamicModelMultipleChoiceField(
1020 queryset=Platform.objects.all(),
1021 required=False,
1022 null_option='None',
1023 label=_('Platform')
1024 )
1025 status = forms.MultipleChoiceField(
1026 label=_('Status'),
1027 choices=DeviceStatusChoices,
1028 required=False
1029 )
1030 airflow = forms.MultipleChoiceField(
1031 label=_('Airflow'),
1032 choices=add_blank_choice(DeviceAirflowChoices),
1033 required=False
1034 )
1035 cooling_method = forms.MultipleChoiceField(
1036 label=_('Cooling method'),
1037 choices=add_blank_choice(CoolingMethodChoices),
1038 required=False
1039 )
1040 serial = forms.CharField(
1041 label=_('Serial'),
1042 required=False
1043 )
1044 asset_tag = forms.CharField(
1045 label=_('Asset tag'),
1046 required=False
1047 )
1048 mac_address = forms.CharField(
1049 required=False,
1050 label=_('MAC address')
1051 )
1052 config_template_id = DynamicModelMultipleChoiceField(
1053 queryset=ConfigTemplate.objects.all(),
1054 required=False,
1055 label=_('Config template')
1056 )
1057 has_primary_ip = forms.NullBooleanField(
1058 required=False,
1059 label=_('Has a primary IP'),
1060 widget=forms.Select(
1061 choices=BOOLEAN_WITH_BLANK_CHOICES
1062 )
1063 )
1064 has_oob_ip = forms.NullBooleanField(
1065 required=False,
1066 label=_('Has an OOB IP'),
1067 widget=forms.Select(
1068 choices=BOOLEAN_WITH_BLANK_CHOICES
1069 )
1070 )
1071 virtual_chassis_member = forms.NullBooleanField(
1072 required=False,
1073 label=_('Virtual chassis member'),
1074 widget=forms.Select(
1075 choices=BOOLEAN_WITH_BLANK_CHOICES
1076 )
1077 )
1078 console_ports = forms.NullBooleanField(
1079 required=False,
1080 label=_('Has console ports'),
1081 widget=forms.Select(
1082 choices=BOOLEAN_WITH_BLANK_CHOICES
1083 )
1084 )
1085 console_server_ports = forms.NullBooleanField(
1086 required=False,
1087 label=_('Has console server ports'),
1088 widget=forms.Select(
1089 choices=BOOLEAN_WITH_BLANK_CHOICES
1090 )
1091 )
1092 power_ports = forms.NullBooleanField(
1093 required=False,
1094 label=_('Has power ports'),
1095 widget=forms.Select(
1096 choices=BOOLEAN_WITH_BLANK_CHOICES
1097 )
1098 )
1099 power_outlets = forms.NullBooleanField(
1100 required=False,
1101 label=_('Has power outlets'),
1102 widget=forms.Select(
1103 choices=BOOLEAN_WITH_BLANK_CHOICES
1104 )
1105 )
1106 interfaces = forms.NullBooleanField(
1107 required=False,
1108 label=_('Has interfaces'),
1109 widget=forms.Select(
1110 choices=BOOLEAN_WITH_BLANK_CHOICES
1111 )
1112 )
1113 pass_through_ports = forms.NullBooleanField(
1114 required=False,
1115 label=_('Has pass-through ports'),
1116 widget=forms.Select(
1117 choices=BOOLEAN_WITH_BLANK_CHOICES
1118 )
1119 )
1120 has_virtual_device_context = forms.NullBooleanField(
1121 required=False,
1122 label=_('Has virtual device contexts'),
1123 widget=forms.Select(
1124 choices=BOOLEAN_WITH_BLANK_CHOICES
1125 )
1126 )
1127 cluster_id = DynamicModelMultipleChoiceField(
1128 queryset=Cluster.objects.all(),
1129 required=False,
1130 label=_('Cluster')
1131 )
1132 cluster_group_id = DynamicModelMultipleChoiceField(
1133 queryset=ClusterGroup.objects.all(),
1134 required=False,
1135 label=_('Cluster group')
1136 )
1137 tag = TagFilterField(model)
1140class VirtualDeviceContextFilterForm(TenancyFilterForm, PrimaryModelFilterSetForm):
1141 model = VirtualDeviceContext
1142 fieldsets = (
1143 FieldSet('q', 'filter_id', 'tag'),
1144 FieldSet('device', 'status', 'has_primary_ip', name=_('Attributes')),
1145 FieldSet('tenant_group_id', 'tenant_id', name=_('Tenant')),
1146 FieldSet('owner_group_id', 'owner_id', name=_('Ownership')),
1147 )
1148 device = DynamicModelMultipleChoiceField(
1149 queryset=Device.objects.all(),
1150 required=False,
1151 label=_('Device')
1152 )
1153 status = forms.MultipleChoiceField(
1154 label=_('Status'),
1155 required=False,
1156 choices=add_blank_choice(VirtualDeviceContextStatusChoices)
1157 )
1158 has_primary_ip = forms.NullBooleanField(
1159 required=False,
1160 label=_('Has a primary IP'),
1161 widget=forms.Select(
1162 choices=BOOLEAN_WITH_BLANK_CHOICES
1163 )
1164 )
1165 tag = TagFilterField(model)
1168class ModuleFilterForm(LocalConfigContextFilterForm, TenancyFilterForm, PrimaryModelFilterSetForm):
1169 model = Module
1170 fieldsets = (
1171 FieldSet('q', 'filter_id', 'tag'),
1172 FieldSet('region_id', 'site_group_id', 'site_id', 'location_id', 'rack_id', 'device_id', name=_('Location')),
1173 FieldSet(
1174 'profile_id', 'manufacturer_id', 'module_type_id', 'status', 'serial', 'asset_tag',
1175 name=_('Hardware')
1176 ),
1177 FieldSet('owner_group_id', 'owner_id', name=_('Ownership')),
1178 )
1179 selector_fields = ('filter_id', 'q', 'manufacturer_id', 'profile_id')
1180 device_id = DynamicModelMultipleChoiceField(
1181 queryset=Device.objects.all(),
1182 required=False,
1183 query_params={
1184 'site_id': '$site_id',
1185 'location_id': '$location_id',
1186 'rack_id': '$rack_id',
1187 },
1188 label=_('Device')
1189 )
1190 region_id = DynamicModelMultipleChoiceField(
1191 queryset=Region.objects.all(),
1192 required=False,
1193 label=_('Region')
1194 )
1195 site_group_id = DynamicModelMultipleChoiceField(
1196 queryset=SiteGroup.objects.all(),
1197 required=False,
1198 label=_('Site group')
1199 )
1200 site_id = DynamicModelMultipleChoiceField(
1201 queryset=Site.objects.all(),
1202 required=False,
1203 query_params={
1204 'region_id': '$region_id',
1205 'group_id': '$site_group_id',
1206 },
1207 label=_('Site')
1208 )
1209 location_id = DynamicModelMultipleChoiceField(
1210 queryset=Location.objects.all(),
1211 required=False,
1212 query_params={
1213 'site_id': '$site_id',
1214 },
1215 label=_('Location')
1216 )
1217 rack_id = DynamicModelMultipleChoiceField(
1218 queryset=Rack.objects.all(),
1219 required=False,
1220 label=_('Rack'),
1221 null_option='None',
1222 query_params={
1223 'site_id': '$site_id',
1224 'location_id': '$location_id',
1225 }
1226 )
1227 manufacturer_id = DynamicModelMultipleChoiceField(
1228 queryset=Manufacturer.objects.all(),
1229 required=False,
1230 label=_('Manufacturer')
1231 )
1232 profile_id = DynamicModelMultipleChoiceField(
1233 queryset=ModuleTypeProfile.objects.all(),
1234 required=False,
1235 null_option='None',
1236 label=_('Profile')
1237 )
1238 module_type_id = DynamicModelMultipleChoiceField(
1239 queryset=ModuleType.objects.all(),
1240 required=False,
1241 query_params={
1242 'profile_id': '$profile_id',
1243 'manufacturer_id': '$manufacturer_id'
1244 },
1245 label=_('Type')
1246 )
1247 status = forms.MultipleChoiceField(
1248 label=_('Status'),
1249 choices=ModuleStatusChoices,
1250 required=False
1251 )
1252 serial = forms.CharField(
1253 label=_('Serial'),
1254 required=False
1255 )
1256 asset_tag = forms.CharField(
1257 label=_('Asset tag'),
1258 required=False
1259 )
1260 tag = TagFilterField(model)
1263class VirtualChassisFilterForm(TenancyFilterForm, PrimaryModelFilterSetForm):
1264 model = VirtualChassis
1265 fieldsets = (
1266 FieldSet('q', 'filter_id', 'tag'),
1267 FieldSet('region_id', 'site_group_id', 'site_id', name=_('Location')),
1268 FieldSet('tenant_id', name=_('Tenant')),
1269 FieldSet('owner_group_id', 'owner_id', name=_('Ownership')),
1270 )
1271 region_id = DynamicModelMultipleChoiceField(
1272 queryset=Region.objects.all(),
1273 required=False,
1274 label=_('Region')
1275 )
1276 site_group_id = DynamicModelMultipleChoiceField(
1277 queryset=SiteGroup.objects.all(),
1278 required=False,
1279 label=_('Site group')
1280 )
1281 site_id = DynamicModelMultipleChoiceField(
1282 queryset=Site.objects.all(),
1283 required=False,
1284 query_params={
1285 'region_id': '$region_id',
1286 'group_id': '$site_group_id',
1287 },
1288 label=_('Site')
1289 )
1290 tag = TagFilterField(model)
1293class CableBundleFilterForm(PrimaryModelFilterSetForm):
1294 model = CableBundle
1295 fieldsets = (
1296 FieldSet('q', 'filter_id', 'tag'),
1297 FieldSet('name', name=_('Attributes')),
1298 )
1299 tag = TagFilterField(model)
1302class CableFilterForm(TenancyFilterForm, PrimaryModelFilterSetForm):
1303 model = Cable
1304 fieldsets = (
1305 FieldSet('q', 'filter_id', 'tag'),
1306 FieldSet('site_id', 'location_id', 'rack_id', 'device_id', name=_('Location')),
1307 FieldSet(
1308 'type', 'status', 'profile', 'color', 'length', 'length_unit', 'unterminated', 'bundle_id',
1309 name=_('Attributes'),
1310 ),
1311 FieldSet('tenant_group_id', 'tenant_id', name=_('Tenant')),
1312 FieldSet('owner_group_id', 'owner_id', name=_('Ownership')),
1313 )
1314 region_id = DynamicModelMultipleChoiceField(
1315 queryset=Region.objects.all(),
1316 required=False,
1317 label=_('Region')
1318 )
1319 site_id = DynamicModelMultipleChoiceField(
1320 queryset=Site.objects.all(),
1321 required=False,
1322 query_params={
1323 'region_id': '$region_id'
1324 },
1325 label=_('Site')
1326 )
1327 location_id = DynamicModelMultipleChoiceField(
1328 queryset=Location.objects.all(),
1329 required=False,
1330 label=_('Location'),
1331 null_option='None',
1332 query_params={
1333 'site_id': '$site_id'
1334 }
1335 )
1336 rack_id = DynamicModelMultipleChoiceField(
1337 queryset=Rack.objects.all(),
1338 required=False,
1339 label=_('Rack'),
1340 null_option='None',
1341 query_params={
1342 'site_id': '$site_id',
1343 'location_id': '$location_id',
1344 }
1345 )
1346 device_id = DynamicModelMultipleChoiceField(
1347 queryset=Device.objects.all(),
1348 required=False,
1349 query_params={
1350 'site_id': '$site_id',
1351 'location_id': '$location_id',
1352 'rack_id': '$rack_id',
1353 'tenant_id': '$tenant_id',
1354 },
1355 label=_('Device')
1356 )
1357 type = forms.MultipleChoiceField(
1358 label=_('Type'),
1359 choices=add_blank_choice(CableTypeChoices),
1360 required=False
1361 )
1362 status = forms.MultipleChoiceField(
1363 label=_('Status'),
1364 required=False,
1365 choices=add_blank_choice(LinkStatusChoices)
1366 )
1367 profile = forms.MultipleChoiceField(
1368 label=_('Profile'),
1369 required=False,
1370 choices=add_blank_choice(CableProfileChoices)
1371 )
1372 color = ColorField(
1373 label=_('Color'),
1374 required=False
1375 )
1376 length = forms.DecimalField(
1377 label=_('Length'),
1378 required=False,
1379 )
1380 length_unit = forms.ChoiceField(
1381 label=_('Length unit'),
1382 choices=add_blank_choice(CableLengthUnitChoices),
1383 required=False
1384 )
1385 unterminated = forms.NullBooleanField(
1386 label=_('Unterminated'),
1387 required=False,
1388 widget=forms.Select(
1389 choices=BOOLEAN_WITH_BLANK_CHOICES
1390 )
1391 )
1392 bundle_id = DynamicModelMultipleChoiceField(
1393 queryset=CableBundle.objects.all(),
1394 required=False,
1395 label=_('Bundle'),
1396 )
1397 tag = TagFilterField(model)
1400class PowerPanelFilterForm(ContactModelFilterForm, PrimaryModelFilterSetForm):
1401 model = PowerPanel
1402 fieldsets = (
1403 FieldSet('q', 'filter_id', 'tag'),
1404 FieldSet('region_id', 'site_group_id', 'site_id', 'location_id', name=_('Location')),
1405 FieldSet('owner_group_id', 'owner_id', name=_('Ownership')),
1406 FieldSet('contact', 'contact_role', 'contact_group', name=_('Contacts')),
1407 )
1408 selector_fields = ('filter_id', 'q', 'site_id', 'location_id')
1409 region_id = DynamicModelMultipleChoiceField(
1410 queryset=Region.objects.all(),
1411 required=False,
1412 label=_('Region')
1413 )
1414 site_group_id = DynamicModelMultipleChoiceField(
1415 queryset=SiteGroup.objects.all(),
1416 required=False,
1417 label=_('Site group')
1418 )
1419 site_id = DynamicModelMultipleChoiceField(
1420 queryset=Site.objects.all(),
1421 required=False,
1422 query_params={
1423 'region_id': '$region_id',
1424 'group_id': '$site_group_id',
1425 },
1426 label=_('Site')
1427 )
1428 location_id = DynamicModelMultipleChoiceField(
1429 queryset=Location.objects.all(),
1430 required=False,
1431 null_option='None',
1432 query_params={
1433 'site_id': '$site_id'
1434 },
1435 label=_('Location')
1436 )
1437 tag = TagFilterField(model)
1440class PowerFeedFilterForm(TenancyFilterForm, PrimaryModelFilterSetForm):
1441 model = PowerFeed
1442 fieldsets = (
1443 FieldSet('q', 'filter_id', 'tag'),
1444 FieldSet('region_id', 'site_group_id', 'site_id', 'power_panel_id', 'rack_id', name=_('Location')),
1445 FieldSet('status', 'type', 'supply', 'phase', 'voltage', 'amperage', 'max_utilization', name=_('Attributes')),
1446 FieldSet('tenant_group_id', 'tenant_id', name=_('Tenant')),
1447 FieldSet('owner_group_id', 'owner_id', name=_('Ownership')),
1448 )
1449 region_id = DynamicModelMultipleChoiceField(
1450 queryset=Region.objects.all(),
1451 required=False,
1452 label=_('Region')
1453 )
1454 site_group_id = DynamicModelMultipleChoiceField(
1455 queryset=SiteGroup.objects.all(),
1456 required=False,
1457 label=_('Site group')
1458 )
1459 site_id = DynamicModelMultipleChoiceField(
1460 queryset=Site.objects.all(),
1461 required=False,
1462 query_params={
1463 'region_id': '$region_id'
1464 },
1465 label=_('Site')
1466 )
1467 power_panel_id = DynamicModelMultipleChoiceField(
1468 queryset=PowerPanel.objects.all(),
1469 required=False,
1470 null_option='None',
1471 query_params={
1472 'site_id': '$site_id'
1473 },
1474 label=_('Power panel')
1475 )
1476 rack_id = DynamicModelMultipleChoiceField(
1477 queryset=Rack.objects.all(),
1478 required=False,
1479 null_option='None',
1480 query_params={
1481 'site_id': '$site_id'
1482 },
1483 label=_('Rack')
1484 )
1485 status = forms.MultipleChoiceField(
1486 label=_('Status'),
1487 choices=PowerFeedStatusChoices,
1488 required=False
1489 )
1490 type = forms.ChoiceField(
1491 label=_('Type'),
1492 choices=add_blank_choice(PowerFeedTypeChoices),
1493 required=False
1494 )
1495 supply = forms.ChoiceField(
1496 label=_('Supply'),
1497 choices=add_blank_choice(PowerFeedSupplyChoices),
1498 required=False
1499 )
1500 phase = forms.ChoiceField(
1501 label=_('Phase'),
1502 choices=add_blank_choice(PowerFeedPhaseChoices),
1503 required=False
1504 )
1505 voltage = forms.IntegerField(
1506 label=_('Voltage'),
1507 required=False
1508 )
1509 amperage = forms.IntegerField(
1510 label=_('Amperage'),
1511 required=False
1512 )
1513 max_utilization = forms.IntegerField(
1514 label=_('Max utilization'),
1515 required=False
1516 )
1517 tag = TagFilterField(model)
1520class CoolingSourceFilterForm(ContactModelFilterForm, PrimaryModelFilterSetForm):
1521 model = CoolingSource
1522 fieldsets = (
1523 FieldSet('q', 'filter_id', 'tag'),
1524 FieldSet('region_id', 'site_group_id', 'site_id', 'location_id', name=_('Location')),
1525 FieldSet('type', 'status', 'fluid_type', name=_('Attributes')),
1526 FieldSet('cooling_capacity', name=_('Characteristics')),
1527 FieldSet('owner_group_id', 'owner_id', name=_('Ownership')),
1528 FieldSet('contact', 'contact_role', 'contact_group', name=_('Contacts')),
1529 )
1530 selector_fields = ('filter_id', 'q', 'site_id', 'location_id')
1531 region_id = DynamicModelMultipleChoiceField(
1532 queryset=Region.objects.all(),
1533 required=False,
1534 label=_('Region')
1535 )
1536 site_group_id = DynamicModelMultipleChoiceField(
1537 queryset=SiteGroup.objects.all(),
1538 required=False,
1539 label=_('Site group')
1540 )
1541 site_id = DynamicModelMultipleChoiceField(
1542 queryset=Site.objects.all(),
1543 required=False,
1544 query_params={
1545 'region_id': '$region_id',
1546 'group_id': '$site_group_id',
1547 },
1548 label=_('Site')
1549 )
1550 location_id = DynamicModelMultipleChoiceField(
1551 queryset=Location.objects.all(),
1552 required=False,
1553 null_option='None',
1554 query_params={
1555 'site_id': '$site_id'
1556 },
1557 label=_('Location')
1558 )
1559 type = forms.MultipleChoiceField(
1560 label=_('Type'),
1561 choices=CoolingSourceTypeChoices,
1562 required=False
1563 )
1564 status = forms.MultipleChoiceField(
1565 label=_('Status'),
1566 choices=CoolingSourceStatusChoices,
1567 required=False
1568 )
1569 fluid_type = forms.MultipleChoiceField(
1570 label=_('Fluid type'),
1571 choices=FluidTypeChoices,
1572 required=False
1573 )
1574 cooling_capacity = forms.DecimalField(
1575 label=_('Cooling capacity'),
1576 required=False
1577 )
1578 tag = TagFilterField(model)
1581class CoolingFeedFilterForm(TenancyFilterForm, PrimaryModelFilterSetForm):
1582 model = CoolingFeed
1583 fieldsets = (
1584 FieldSet('q', 'filter_id', 'tag'),
1585 FieldSet('region_id', 'site_group_id', 'site_id', 'cooling_source_id', 'rack_id', name=_('Location')),
1586 FieldSet('status', name=_('Attributes')),
1587 FieldSet(
1588 'cooling_capacity', 'max_flow', 'max_flow_unit', name=_('Characteristics')
1589 ),
1590 FieldSet('tenant_group_id', 'tenant_id', name=_('Tenant')),
1591 FieldSet('owner_group_id', 'owner_id', name=_('Ownership')),
1592 )
1593 region_id = DynamicModelMultipleChoiceField(
1594 queryset=Region.objects.all(),
1595 required=False,
1596 label=_('Region')
1597 )
1598 site_group_id = DynamicModelMultipleChoiceField(
1599 queryset=SiteGroup.objects.all(),
1600 required=False,
1601 label=_('Site group')
1602 )
1603 site_id = DynamicModelMultipleChoiceField(
1604 queryset=Site.objects.all(),
1605 required=False,
1606 query_params={
1607 'region_id': '$region_id'
1608 },
1609 label=_('Site')
1610 )
1611 cooling_source_id = DynamicModelMultipleChoiceField(
1612 queryset=CoolingSource.objects.all(),
1613 required=False,
1614 null_option='None',
1615 query_params={
1616 'site_id': '$site_id'
1617 },
1618 label=_('Cooling source')
1619 )
1620 rack_id = DynamicModelMultipleChoiceField(
1621 queryset=Rack.objects.all(),
1622 required=False,
1623 null_option='None',
1624 query_params={
1625 'site_id': '$site_id'
1626 },
1627 label=_('Rack')
1628 )
1629 status = forms.MultipleChoiceField(
1630 label=_('Status'),
1631 choices=CoolingFeedStatusChoices,
1632 required=False
1633 )
1634 cooling_capacity = forms.DecimalField(
1635 label=_('Cooling capacity'),
1636 required=False
1637 )
1638 max_flow = forms.DecimalField(
1639 label=_('Max flow'),
1640 required=False
1641 )
1642 max_flow_unit = forms.MultipleChoiceField(
1643 label=_('Max flow unit'),
1644 choices=FlowRateUnitChoices,
1645 required=False
1646 )
1647 tag = TagFilterField(model)
1650#
1651# Device components
1652#
1654class DeviceComponentTemplateFilterForm(NetBoxModelFilterSetForm):
1655 device_type_id = DynamicModelMultipleChoiceField(
1656 queryset=DeviceType.objects.all(),
1657 required=False,
1658 label=_('Device type'),
1659 )
1662class ModularDeviceComponentTemplateFilterForm(DeviceComponentTemplateFilterForm):
1663 module_type_id = DynamicModelMultipleChoiceField(
1664 queryset=ModuleType.objects.all(),
1665 required=False,
1666 query_params={'manufacturer_id': '$manufacturer_id'},
1667 label=_('Module Type'),
1668 )
1671class CabledFilterForm(forms.Form):
1672 cabled = forms.NullBooleanField(
1673 label=_('Cabled'),
1674 required=False,
1675 widget=forms.Select(
1676 choices=BOOLEAN_WITH_BLANK_CHOICES
1677 )
1678 )
1679 occupied = forms.NullBooleanField(
1680 label=_('Occupied'),
1681 required=False,
1682 widget=forms.Select(
1683 choices=BOOLEAN_WITH_BLANK_CHOICES
1684 )
1685 )
1688class PathEndpointFilterForm(CabledFilterForm):
1689 connected = forms.NullBooleanField(
1690 label=_('Connected'),
1691 required=False,
1692 widget=forms.Select(
1693 choices=BOOLEAN_WITH_BLANK_CHOICES
1694 )
1695 )
1698class ConsolePortFilterForm(PathEndpointFilterForm, DeviceComponentFilterForm):
1699 model = ConsolePort
1700 fieldsets = (
1701 FieldSet('q', 'filter_id', 'tag'),
1702 FieldSet('name', 'label', 'type', 'speed', name=_('Attributes')),
1703 FieldSet('region_id', 'site_group_id', 'site_id', 'location_id', 'rack_id', name=_('Location')),
1704 FieldSet(
1705 'tenant_id', 'device_type_id', 'device_role_id', 'device_id', 'device_status', 'virtual_chassis_id',
1706 name=_('Device')
1707 ),
1708 FieldSet('cabled', 'connected', 'occupied', name=_('Connection')),
1709 FieldSet('owner_group_id', 'owner_id', name=_('Ownership')),
1710 )
1711 type = forms.MultipleChoiceField(
1712 label=_('Type'),
1713 choices=ConsolePortTypeChoices,
1714 required=False
1715 )
1716 speed = forms.MultipleChoiceField(
1717 label=_('Speed'),
1718 choices=ConsolePortSpeedChoices,
1719 required=False
1720 )
1721 tag = TagFilterField(model)
1724class ConsolePortTemplateFilterForm(ModularDeviceComponentTemplateFilterForm):
1725 model = ConsolePortTemplate
1726 fieldsets = (
1727 FieldSet('q', 'filter_id', 'tag'),
1728 FieldSet('name', 'label', 'type', name=_('Attributes')),
1729 FieldSet('device_type_id', 'module_type_id', name=_('Device')),
1730 )
1731 type = forms.MultipleChoiceField(
1732 label=_('Type'),
1733 choices=ConsolePortTypeChoices,
1734 required=False
1735 )
1738class ConsoleServerPortFilterForm(PathEndpointFilterForm, DeviceComponentFilterForm):
1739 model = ConsoleServerPort
1740 fieldsets = (
1741 FieldSet('q', 'filter_id', 'tag'),
1742 FieldSet('name', 'label', 'type', 'speed', name=_('Attributes')),
1743 FieldSet('region_id', 'site_group_id', 'site_id', 'location_id', 'rack_id', name=_('Location')),
1744 FieldSet(
1745 'tenant_id', 'device_type_id', 'device_role_id', 'device_id', 'device_status', 'virtual_chassis_id',
1746 name=_('Device')
1747 ),
1748 FieldSet('cabled', 'connected', 'occupied', name=_('Connection')),
1749 FieldSet('owner_group_id', 'owner_id', name=_('Ownership')),
1750 )
1751 type = forms.MultipleChoiceField(
1752 label=_('Type'),
1753 choices=ConsolePortTypeChoices,
1754 required=False
1755 )
1756 speed = forms.MultipleChoiceField(
1757 label=_('Speed'),
1758 choices=ConsolePortSpeedChoices,
1759 required=False
1760 )
1761 tag = TagFilterField(model)
1764class ConsoleServerPortTemplateFilterForm(ModularDeviceComponentTemplateFilterForm):
1765 model = ConsoleServerPortTemplate
1766 fieldsets = (
1767 FieldSet('q', 'filter_id', 'tag'),
1768 FieldSet('name', 'label', 'type', name=_('Attributes')),
1769 FieldSet('device_type_id', 'module_type_id', name=_('Device')),
1770 )
1771 type = forms.MultipleChoiceField(
1772 label=_('Type'),
1773 choices=ConsolePortTypeChoices,
1774 required=False
1775 )
1778class PowerPortFilterForm(PathEndpointFilterForm, DeviceComponentFilterForm):
1779 model = PowerPort
1780 fieldsets = (
1781 FieldSet('q', 'filter_id', 'tag'),
1782 FieldSet('name', 'label', 'type', name=_('Attributes')),
1783 FieldSet('region_id', 'site_group_id', 'site_id', 'location_id', 'rack_id', name=_('Location')),
1784 FieldSet(
1785 'tenant_id', 'device_type_id', 'device_role_id', 'device_id', 'device_status', 'virtual_chassis_id',
1786 name=_('Device')
1787 ),
1788 FieldSet('cabled', 'connected', 'occupied', name=_('Connection')),
1789 FieldSet('owner_group_id', 'owner_id', name=_('Ownership')),
1790 )
1791 type = forms.MultipleChoiceField(
1792 label=_('Type'),
1793 choices=PowerPortTypeChoices,
1794 required=False
1795 )
1796 tag = TagFilterField(model)
1799class PowerPortTemplateFilterForm(ModularDeviceComponentTemplateFilterForm):
1800 model = PowerPortTemplate
1801 fieldsets = (
1802 FieldSet('q', 'filter_id', 'tag'),
1803 FieldSet('name', 'label', 'type', name=_('Attributes')),
1804 FieldSet('device_type_id', 'module_type_id', name=_('Device')),
1805 )
1806 type = forms.MultipleChoiceField(
1807 label=_('Type'),
1808 choices=PowerPortTypeChoices,
1809 required=False
1810 )
1813class PowerOutletFilterForm(PathEndpointFilterForm, DeviceComponentFilterForm):
1814 model = PowerOutlet
1815 fieldsets = (
1816 FieldSet('q', 'filter_id', 'tag'),
1817 FieldSet('name', 'label', 'type', 'color', 'status', name=_('Attributes')),
1818 FieldSet('region_id', 'site_group_id', 'site_id', 'location_id', 'rack_id', name=_('Location')),
1819 FieldSet(
1820 'tenant_id', 'device_type_id', 'device_role_id', 'device_id', 'device_status', 'virtual_chassis_id',
1821 name=_('Device')
1822 ),
1823 FieldSet('cabled', 'connected', 'occupied', name=_('Connection')),
1824 FieldSet('owner_group_id', 'owner_id', name=_('Ownership')),
1825 )
1826 type = forms.MultipleChoiceField(
1827 label=_('Type'),
1828 choices=PowerOutletTypeChoices,
1829 required=False
1830 )
1831 tag = TagFilterField(model)
1832 color = ColorField(
1833 label=_('Color'),
1834 required=False
1835 )
1836 status = forms.MultipleChoiceField(
1837 label=_('Status'),
1838 choices=PowerOutletStatusChoices,
1839 required=False
1840 )
1843class PowerOutletTemplateFilterForm(ModularDeviceComponentTemplateFilterForm):
1844 model = PowerOutletTemplate
1845 fieldsets = (
1846 FieldSet('q', 'filter_id', 'tag'),
1847 FieldSet('name', 'label', 'type', name=_('Attributes')),
1848 FieldSet('device_type_id', 'module_type_id', name=_('Device')),
1849 )
1850 type = forms.MultipleChoiceField(
1851 label=_('Type'),
1852 choices=PowerOutletTypeChoices,
1853 required=False
1854 )
1857class CoolingIntakeFilterForm(DeviceComponentFilterForm):
1858 model = CoolingIntake
1859 fieldsets = (
1860 FieldSet('q', 'filter_id', 'tag'),
1861 FieldSet(
1862 'name', 'label', 'type', 'diameter', 'diameter_unit', 'max_flow', 'max_flow_unit',
1863 'cooling_outflow_id', name=_('Attributes')
1864 ),
1865 FieldSet('region_id', 'site_group_id', 'site_id', 'location_id', 'rack_id', name=_('Location')),
1866 FieldSet(
1867 'tenant_id', 'device_type_id', 'device_role_id', 'device_id', 'device_status', 'virtual_chassis_id',
1868 name=_('Device')
1869 ),
1870 FieldSet('owner_group_id', 'owner_id', name=_('Ownership')),
1871 )
1872 type = forms.MultipleChoiceField(
1873 label=_('Type'),
1874 choices=CoolingConnectorTypeChoices,
1875 required=False
1876 )
1877 diameter = forms.DecimalField(
1878 label=_('Diameter'),
1879 required=False
1880 )
1881 diameter_unit = forms.MultipleChoiceField(
1882 label=_('Diameter unit'),
1883 choices=DiameterUnitChoices,
1884 required=False
1885 )
1886 max_flow = forms.DecimalField(
1887 label=_('Max flow'),
1888 required=False
1889 )
1890 max_flow_unit = forms.MultipleChoiceField(
1891 label=_('Max flow unit'),
1892 choices=FlowRateUnitChoices,
1893 required=False
1894 )
1895 cooling_outflow_id = DynamicModelMultipleChoiceField(
1896 label=_('Cooling outflow'),
1897 queryset=CoolingOutflow.objects.all(),
1898 required=False
1899 )
1900 tag = TagFilterField(model)
1903class CoolingIntakeTemplateFilterForm(ModularDeviceComponentTemplateFilterForm):
1904 model = CoolingIntakeTemplate
1905 fieldsets = (
1906 FieldSet('q', 'filter_id', 'tag'),
1907 FieldSet(
1908 'name', 'label', 'type', 'diameter', 'diameter_unit', 'max_flow', 'max_flow_unit',
1909 name=_('Attributes')
1910 ),
1911 FieldSet('device_type_id', 'module_type_id', name=_('Device')),
1912 )
1913 type = forms.MultipleChoiceField(
1914 label=_('Type'),
1915 choices=CoolingConnectorTypeChoices,
1916 required=False
1917 )
1918 diameter = forms.DecimalField(
1919 label=_('Diameter'),
1920 required=False
1921 )
1922 diameter_unit = forms.MultipleChoiceField(
1923 label=_('Diameter unit'),
1924 choices=DiameterUnitChoices,
1925 required=False
1926 )
1927 max_flow = forms.DecimalField(
1928 label=_('Max flow'),
1929 required=False
1930 )
1931 max_flow_unit = forms.MultipleChoiceField(
1932 label=_('Max flow unit'),
1933 choices=FlowRateUnitChoices,
1934 required=False
1935 )
1938class CoolingOutflowFilterForm(DeviceComponentFilterForm):
1939 model = CoolingOutflow
1940 fieldsets = (
1941 FieldSet('q', 'filter_id', 'tag'),
1942 FieldSet(
1943 'name', 'label', 'type', 'diameter', 'diameter_unit', 'cooling_intake_id', name=_('Attributes')
1944 ),
1945 FieldSet('region_id', 'site_group_id', 'site_id', 'location_id', 'rack_id', name=_('Location')),
1946 FieldSet(
1947 'tenant_id', 'device_type_id', 'device_role_id', 'device_id', 'device_status', 'virtual_chassis_id',
1948 name=_('Device')
1949 ),
1950 FieldSet('owner_group_id', 'owner_id', name=_('Ownership')),
1951 )
1952 type = forms.MultipleChoiceField(
1953 label=_('Type'),
1954 choices=CoolingConnectorTypeChoices,
1955 required=False
1956 )
1957 diameter = forms.DecimalField(
1958 label=_('Diameter'),
1959 required=False
1960 )
1961 diameter_unit = forms.MultipleChoiceField(
1962 label=_('Diameter unit'),
1963 choices=DiameterUnitChoices,
1964 required=False
1965 )
1966 cooling_intake_id = DynamicModelMultipleChoiceField(
1967 label=_('Cooling intake'),
1968 queryset=CoolingIntake.objects.all(),
1969 required=False
1970 )
1971 tag = TagFilterField(model)
1974class CoolingOutflowTemplateFilterForm(ModularDeviceComponentTemplateFilterForm):
1975 model = CoolingOutflowTemplate
1976 fieldsets = (
1977 FieldSet('q', 'filter_id', 'tag'),
1978 FieldSet('name', 'label', 'type', 'diameter', 'diameter_unit', 'cooling_intake_id', name=_('Attributes')),
1979 FieldSet('device_type_id', 'module_type_id', name=_('Device')),
1980 )
1981 type = forms.MultipleChoiceField(
1982 label=_('Type'),
1983 choices=CoolingConnectorTypeChoices,
1984 required=False
1985 )
1986 diameter = forms.DecimalField(
1987 label=_('Diameter'),
1988 required=False
1989 )
1990 diameter_unit = forms.MultipleChoiceField(
1991 label=_('Diameter unit'),
1992 choices=DiameterUnitChoices,
1993 required=False
1994 )
1995 cooling_intake_id = DynamicModelMultipleChoiceField(
1996 label=_('Cooling intake'),
1997 queryset=CoolingIntakeTemplate.objects.all(),
1998 required=False
1999 )
2002class InterfaceFilterForm(PathEndpointFilterForm, DeviceComponentFilterForm):
2003 model = Interface
2004 fieldsets = (
2005 FieldSet('q', 'filter_id', 'tag'),
2006 FieldSet(
2007 'name', 'label', 'kind', 'type', 'channels', 'channel_id', 'speed', 'duplex', 'enabled', 'mgmt_only',
2008 name=_('Attributes')
2009 ),
2010 FieldSet('vrf_id', 'l2vpn_id', 'mac_address', 'wwn', name=_('Addressing')),
2011 FieldSet('poe_mode', 'poe_type', name=_('PoE')),
2012 FieldSet('mode', 'vlan_translation_policy_id', name=_('802.1Q Switching')),
2013 FieldSet('rf_role', 'rf_channel', 'rf_channel_width', 'tx_power', name=_('Wireless')),
2014 FieldSet('region_id', 'site_group_id', 'site_id', 'location_id', 'rack_id', name=_('Location')),
2015 FieldSet(
2016 'tenant_id', 'device_type_id', 'device_role_id', 'device_id', 'device_status', 'virtual_chassis_id',
2017 'vdc_id',
2018 name=_('Device')
2019 ),
2020 FieldSet('cabled', 'connected', 'occupied', name=_('Connection')),
2021 FieldSet('owner_group_id', 'owner_id', name=_('Ownership')),
2022 )
2023 selector_fields = ('filter_id', 'q', 'device_id')
2024 vdc_id = DynamicModelMultipleChoiceField(
2025 queryset=VirtualDeviceContext.objects.all(),
2026 required=False,
2027 query_params={
2028 'device_id': '$device_id',
2029 },
2030 label=_('Virtual Device Context')
2031 )
2032 kind = forms.MultipleChoiceField(
2033 label=_('Kind'),
2034 choices=InterfaceKindChoices,
2035 required=False
2036 )
2037 type = forms.MultipleChoiceField(
2038 label=_('Type'),
2039 choices=InterfaceTypeChoices,
2040 required=False
2041 )
2042 channels = forms.IntegerField(
2043 label=_('Channels'),
2044 required=False
2045 )
2046 channel_id = forms.IntegerField(
2047 label=_('Channel ID'),
2048 required=False
2049 )
2050 speed = PositiveBigIntegerField(
2051 label=_('Speed'),
2052 required=False,
2053 widget=NumberWithOptions(
2054 options=InterfaceSpeedChoices
2055 )
2056 )
2057 duplex = forms.MultipleChoiceField(
2058 label=_('Duplex'),
2059 choices=InterfaceDuplexChoices,
2060 required=False
2061 )
2062 enabled = forms.NullBooleanField(
2063 label=_('Enabled'),
2064 required=False,
2065 widget=forms.Select(
2066 choices=BOOLEAN_WITH_BLANK_CHOICES
2067 )
2068 )
2069 mgmt_only = forms.NullBooleanField(
2070 label=_('Mgmt only'),
2071 required=False,
2072 widget=forms.Select(
2073 choices=BOOLEAN_WITH_BLANK_CHOICES
2074 )
2075 )
2076 mac_address = forms.CharField(
2077 required=False,
2078 label=_('MAC address')
2079 )
2080 wwn = forms.CharField(
2081 required=False,
2082 label=_('WWN')
2083 )
2084 poe_mode = forms.MultipleChoiceField(
2085 choices=InterfacePoEModeChoices,
2086 required=False,
2087 label=_('PoE mode')
2088 )
2089 poe_type = forms.MultipleChoiceField(
2090 choices=InterfacePoETypeChoices,
2091 required=False,
2092 label=_('PoE type')
2093 )
2094 mode = forms.MultipleChoiceField(
2095 choices=InterfaceModeChoices,
2096 required=False,
2097 label=_('802.1Q mode')
2098 )
2099 vlan_translation_policy_id = DynamicModelMultipleChoiceField(
2100 queryset=VLANTranslationPolicy.objects.all(),
2101 required=False,
2102 label=_('VLAN Translation Policy')
2103 )
2104 rf_role = forms.MultipleChoiceField(
2105 choices=WirelessRoleChoices,
2106 required=False,
2107 label=_('Wireless role')
2108 )
2109 rf_channel = forms.MultipleChoiceField(
2110 choices=WirelessChannelChoices,
2111 required=False,
2112 label=_('Wireless channel')
2113 )
2114 rf_channel_frequency = forms.IntegerField(
2115 required=False,
2116 label=_('Channel frequency (MHz)')
2117 )
2118 rf_channel_width = forms.IntegerField(
2119 required=False,
2120 label=_('Channel width (MHz)')
2121 )
2122 tx_power = forms.IntegerField(
2123 required=False,
2124 label=_('Transmit power (dBm)'),
2125 min_value=-40,
2126 max_value=127
2127 )
2128 vrf_id = DynamicModelMultipleChoiceField(
2129 queryset=VRF.objects.all(),
2130 required=False,
2131 label=_('VRF')
2132 )
2133 l2vpn_id = DynamicModelMultipleChoiceField(
2134 queryset=L2VPN.objects.all(),
2135 required=False,
2136 label=_('L2VPN')
2137 )
2138 tag = TagFilterField(model)
2141class InterfaceTemplateFilterForm(ModularDeviceComponentTemplateFilterForm):
2142 model = InterfaceTemplate
2143 fieldsets = (
2144 FieldSet('q', 'filter_id', 'tag'),
2145 FieldSet('name', 'label', 'type', 'enabled', 'mgmt_only', name=_('Attributes')),
2146 FieldSet('poe_mode', 'poe_type', name=_('PoE')),
2147 FieldSet('rf_role', name=_('Wireless')),
2148 FieldSet('device_type_id', 'module_type_id', name=_('Device')),
2149 )
2150 type = forms.MultipleChoiceField(
2151 label=_('Type'),
2152 choices=InterfaceTypeChoices,
2153 required=False
2154 )
2155 enabled = forms.NullBooleanField(
2156 label=_('Enabled'),
2157 required=False,
2158 widget=forms.Select(
2159 choices=BOOLEAN_WITH_BLANK_CHOICES
2160 )
2161 )
2162 mgmt_only = forms.NullBooleanField(
2163 label=_('Management only'),
2164 required=False,
2165 widget=forms.Select(
2166 choices=BOOLEAN_WITH_BLANK_CHOICES
2167 )
2168 )
2169 poe_mode = forms.MultipleChoiceField(
2170 choices=InterfacePoEModeChoices,
2171 required=False,
2172 label=_('PoE mode')
2173 )
2174 poe_type = forms.MultipleChoiceField(
2175 choices=InterfacePoETypeChoices,
2176 required=False,
2177 label=_('PoE type')
2178 )
2179 rf_role = forms.MultipleChoiceField(
2180 choices=WirelessRoleChoices,
2181 required=False,
2182 label=_('Wireless role')
2183 )
2186class FrontPortFilterForm(CabledFilterForm, DeviceComponentFilterForm):
2187 fieldsets = (
2188 FieldSet('q', 'filter_id', 'tag'),
2189 FieldSet('name', 'label', 'type', 'color', name=_('Attributes')),
2190 FieldSet('region_id', 'site_group_id', 'site_id', 'location_id', 'rack_id', name=_('Location')),
2191 FieldSet(
2192 'tenant_id', 'device_type_id', 'device_role_id', 'device_id', 'device_status', 'virtual_chassis_id',
2193 name=_('Device')
2194 ),
2195 FieldSet('cabled', 'occupied', name=_('Cable')),
2196 FieldSet('owner_group_id', 'owner_id', name=_('Ownership')),
2197 )
2198 model = FrontPort
2199 type = forms.MultipleChoiceField(
2200 label=_('Type'),
2201 choices=PortTypeChoices,
2202 required=False
2203 )
2204 color = ColorField(
2205 label=_('Color'),
2206 required=False
2207 )
2208 tag = TagFilterField(model)
2211class FrontPortTemplateFilterForm(ModularDeviceComponentTemplateFilterForm):
2212 model = FrontPortTemplate
2213 fieldsets = (
2214 FieldSet('q', 'filter_id', 'tag'),
2215 FieldSet('name', 'label', 'type', 'color', name=_('Attributes')),
2216 FieldSet('device_type_id', 'module_type_id', name=_('Device')),
2217 )
2218 type = forms.MultipleChoiceField(
2219 label=_('Type'),
2220 choices=PortTypeChoices,
2221 required=False
2222 )
2223 color = ColorField(
2224 label=_('Color'),
2225 required=False
2226 )
2229class RearPortFilterForm(CabledFilterForm, DeviceComponentFilterForm):
2230 model = RearPort
2231 fieldsets = (
2232 FieldSet('q', 'filter_id', 'tag'),
2233 FieldSet('name', 'label', 'type', 'color', name=_('Attributes')),
2234 FieldSet('region_id', 'site_group_id', 'site_id', 'location_id', 'rack_id', name=_('Location')),
2235 FieldSet(
2236 'tenant_id', 'device_type_id', 'device_role_id', 'device_id', 'device_status', 'virtual_chassis_id',
2237 name=_('Device')
2238 ),
2239 FieldSet('cabled', 'occupied', name=_('Cable')),
2240 FieldSet('owner_group_id', 'owner_id', name=_('Ownership')),
2241 )
2242 type = forms.MultipleChoiceField(
2243 label=_('Type'),
2244 choices=PortTypeChoices,
2245 required=False
2246 )
2247 color = ColorField(
2248 label=_('Color'),
2249 required=False
2250 )
2251 tag = TagFilterField(model)
2254class RearPortTemplateFilterForm(ModularDeviceComponentTemplateFilterForm):
2255 model = RearPortTemplate
2256 fieldsets = (
2257 FieldSet('q', 'filter_id', 'tag'),
2258 FieldSet('name', 'label', 'type', 'color', name=_('Attributes')),
2259 FieldSet('device_type_id', 'module_type_id', name=_('Device')),
2260 )
2261 type = forms.MultipleChoiceField(
2262 label=_('Type'),
2263 choices=PortTypeChoices,
2264 required=False
2265 )
2266 color = ColorField(
2267 label=_('Color'),
2268 required=False
2269 )
2272class ModuleBayFilterForm(DeviceComponentFilterForm):
2273 model = ModuleBay
2274 fieldsets = (
2275 FieldSet('q', 'filter_id', 'tag'),
2276 FieldSet('name', 'label', 'position', 'enabled', 'module_bay_type_id', name=_('Attributes')),
2277 FieldSet('region_id', 'site_group_id', 'site_id', 'location_id', 'rack_id', name=_('Location')),
2278 FieldSet(
2279 'tenant_id', 'device_type_id', 'device_role_id', 'device_id', 'device_status', 'virtual_chassis_id',
2280 name=_('Device')
2281 ),
2282 FieldSet('owner_group_id', 'owner_id', name=_('Ownership')),
2283 )
2284 position = forms.CharField(
2285 label=_('Position'),
2286 required=False
2287 )
2288 enabled = forms.NullBooleanField(
2289 label=_('Enabled'),
2290 required=False,
2291 widget=forms.Select(choices=BOOLEAN_WITH_BLANK_CHOICES),
2292 )
2293 module_bay_type_id = DynamicModelMultipleChoiceField(
2294 queryset=ModuleBayType.objects.all(),
2295 required=False,
2296 label=_('Module bay type')
2297 )
2298 tag = TagFilterField(model)
2301class ModuleBayTemplateFilterForm(ModularDeviceComponentTemplateFilterForm):
2302 model = ModuleBayTemplate
2303 fieldsets = (
2304 FieldSet('q', 'filter_id', 'tag'),
2305 FieldSet('name', 'label', 'position', 'enabled', 'module_bay_type_id', name=_('Attributes')),
2306 FieldSet('device_type_id', 'module_type_id', name=_('Device')),
2307 )
2308 position = forms.CharField(
2309 label=_('Position'),
2310 required=False,
2311 )
2312 enabled = forms.NullBooleanField(
2313 label=_('Enabled'),
2314 required=False,
2315 widget=forms.Select(choices=BOOLEAN_WITH_BLANK_CHOICES),
2316 )
2317 module_bay_type_id = DynamicModelMultipleChoiceField(
2318 queryset=ModuleBayType.objects.all(),
2319 required=False,
2320 label=_('Module bay type')
2321 )
2324class DeviceBayFilterForm(DeviceComponentFilterForm):
2325 model = DeviceBay
2326 fieldsets = (
2327 FieldSet('q', 'filter_id', 'tag'),
2328 FieldSet('name', 'label', 'enabled', name=_('Attributes')),
2329 FieldSet('region_id', 'site_group_id', 'site_id', 'location_id', 'rack_id', name=_('Location')),
2330 FieldSet(
2331 'tenant_id', 'device_type_id', 'device_role_id', 'device_id', 'device_status', 'virtual_chassis_id',
2332 name=_('Device')
2333 ),
2334 FieldSet('owner_group_id', 'owner_id', name=_('Ownership')),
2335 )
2336 enabled = forms.NullBooleanField(
2337 label=_('Enabled'),
2338 required=False,
2339 widget=forms.Select(choices=BOOLEAN_WITH_BLANK_CHOICES),
2340 )
2341 tag = TagFilterField(model)
2344class DeviceBayTemplateFilterForm(DeviceComponentTemplateFilterForm):
2345 model = DeviceBayTemplate
2346 fieldsets = (
2347 FieldSet('q', 'filter_id', 'tag'),
2348 FieldSet('name', 'label', 'enabled', name=_('Attributes')),
2349 FieldSet('device_type_id', name=_('Device')),
2350 )
2351 enabled = forms.NullBooleanField(
2352 label=_('Enabled'),
2353 required=False,
2354 widget=forms.Select(choices=BOOLEAN_WITH_BLANK_CHOICES),
2355 )
2358class InventoryItemFilterForm(DeviceComponentFilterForm):
2359 model = InventoryItem
2360 fieldsets = (
2361 FieldSet('q', 'filter_id', 'tag'),
2362 FieldSet(
2363 'name', 'label', 'status', 'role_id', 'manufacturer_id', 'serial', 'asset_tag', 'discovered',
2364 name=_('Attributes')
2365 ),
2366 FieldSet('region_id', 'site_group_id', 'site_id', 'location_id', 'rack_id', name=_('Location')),
2367 FieldSet(
2368 'tenant_id', 'device_type_id', 'device_role_id', 'device_id', 'device_status', 'virtual_chassis_id',
2369 name=_('Device')
2370 ),
2371 FieldSet('owner_group_id', 'owner_id', name=_('Ownership')),
2372 )
2373 role_id = DynamicModelMultipleChoiceField(
2374 queryset=InventoryItemRole.objects.all(),
2375 required=False,
2376 label=_('Role')
2377 )
2378 manufacturer_id = DynamicModelMultipleChoiceField(
2379 queryset=Manufacturer.objects.all(),
2380 required=False,
2381 label=_('Manufacturer')
2382 )
2383 serial = forms.CharField(
2384 label=_('Serial'),
2385 required=False
2386 )
2387 asset_tag = forms.CharField(
2388 label=_('Asset tag'),
2389 required=False
2390 )
2391 discovered = forms.NullBooleanField(
2392 label=_('Discovered'),
2393 required=False,
2394 widget=forms.Select(
2395 choices=BOOLEAN_WITH_BLANK_CHOICES
2396 )
2397 )
2398 status = forms.MultipleChoiceField(
2399 label=_('Status'),
2400 choices=InventoryItemStatusChoices,
2401 required=False
2402 )
2403 tag = TagFilterField(model)
2406class InventoryItemTemplateFilterForm(DeviceComponentTemplateFilterForm):
2407 model = InventoryItemTemplate
2408 fieldsets = (
2409 FieldSet('q', 'filter_id', 'tag'),
2410 FieldSet('name', 'label', 'role_id', 'manufacturer_id', name=_('Attributes')),
2411 FieldSet('device_type_id', name=_('Device')),
2412 )
2413 role_id = DynamicModelMultipleChoiceField(
2414 queryset=InventoryItemRole.objects.all(),
2415 required=False,
2416 label=_('Role')
2417 )
2418 manufacturer_id = DynamicModelMultipleChoiceField(
2419 queryset=Manufacturer.objects.all(),
2420 required=False,
2421 label=_('Manufacturer')
2422 )
2425#
2426# Device component roles
2427#
2429class InventoryItemRoleFilterForm(OrganizationalModelFilterSetForm):
2430 model = InventoryItemRole
2431 fieldsets = (
2432 FieldSet('q', 'filter_id', 'tag'),
2433 FieldSet('owner_group_id', 'owner_id', name=_('Ownership')),
2434 )
2435 tag = TagFilterField(model)
2438#
2439# Addressing
2440#
2442class MACAddressFilterForm(PrimaryModelFilterSetForm):
2443 model = MACAddress
2444 fieldsets = (
2445 FieldSet('q', 'filter_id', 'tag'),
2446 FieldSet('mac_address', name=_('Attributes')),
2447 FieldSet('device_id', 'virtual_machine_id', 'assigned', 'primary', name=_('Assignments')),
2448 FieldSet('owner_group_id', 'owner_id', name=_('Ownership')),
2449 )
2450 selector_fields = ('filter_id', 'q', 'device_id', 'virtual_machine_id')
2451 mac_address = forms.CharField(
2452 required=False,
2453 label=_('MAC address'),
2454 )
2455 device_id = DynamicModelMultipleChoiceField(
2456 queryset=Device.objects.all(),
2457 required=False,
2458 label=_('Assigned Device'),
2459 )
2460 virtual_machine_id = DynamicModelMultipleChoiceField(
2461 queryset=VirtualMachine.objects.all(),
2462 required=False,
2463 label=_('Assigned VM'),
2464 )
2465 assigned = forms.NullBooleanField(
2466 required=False,
2467 label=_('Assigned to an interface'),
2468 widget=forms.Select(
2469 choices=BOOLEAN_WITH_BLANK_CHOICES
2470 ),
2471 )
2472 primary = forms.NullBooleanField(
2473 required=False,
2474 label=_('Primary MAC of an interface'),
2475 widget=forms.Select(
2476 choices=BOOLEAN_WITH_BLANK_CHOICES
2477 ),
2478 )
2479 tag = TagFilterField(model)
2482#
2483# Connections
2484#
2486class ConsoleConnectionFilterForm(FilterForm):
2487 region_id = DynamicModelMultipleChoiceField(
2488 queryset=Region.objects.all(),
2489 required=False,
2490 label=_('Region')
2491 )
2492 site_id = DynamicModelMultipleChoiceField(
2493 queryset=Site.objects.all(),
2494 required=False,
2495 query_params={
2496 'region_id': '$region_id'
2497 },
2498 label=_('Site')
2499 )
2500 device_id = DynamicModelMultipleChoiceField(
2501 queryset=Device.objects.all(),
2502 required=False,
2503 query_params={
2504 'site_id': '$site_id'
2505 },
2506 label=_('Device')
2507 )
2510class PowerConnectionFilterForm(FilterForm):
2511 region_id = DynamicModelMultipleChoiceField(
2512 queryset=Region.objects.all(),
2513 required=False,
2514 label=_('Region')
2515 )
2516 site_id = DynamicModelMultipleChoiceField(
2517 queryset=Site.objects.all(),
2518 required=False,
2519 query_params={
2520 'region_id': '$region_id'
2521 },
2522 label=_('Site')
2523 )
2524 device_id = DynamicModelMultipleChoiceField(
2525 queryset=Device.objects.all(),
2526 required=False,
2527 query_params={
2528 'site_id': '$site_id'
2529 },
2530 label=_('Device')
2531 )
2534class InterfaceConnectionFilterForm(FilterForm):
2535 region_id = DynamicModelMultipleChoiceField(
2536 queryset=Region.objects.all(),
2537 required=False,
2538 label=_('Region')
2539 )
2540 site_id = DynamicModelMultipleChoiceField(
2541 queryset=Site.objects.all(),
2542 required=False,
2543 query_params={
2544 'region_id': '$region_id'
2545 },
2546 label=_('Site')
2547 )
2548 device_id = DynamicModelMultipleChoiceField(
2549 queryset=Device.objects.all(),
2550 required=False,
2551 query_params={
2552 'site_id': '$site_id'
2553 },
2554 label=_('Device')
2555 )