|
@@ -6,13 +6,12 @@ from timezone_field import TimeZoneFormField
|
|
|
from dcim.choices import *
|
|
from dcim.choices import *
|
|
|
from dcim.constants import *
|
|
from dcim.constants import *
|
|
|
from dcim.models import *
|
|
from dcim.models import *
|
|
|
-from extras.forms import AddRemoveTagsForm, CustomFieldModelBulkEditForm
|
|
|
|
|
-from ipam.constants import BGP_ASN_MIN, BGP_ASN_MAX
|
|
|
|
|
-from ipam.models import VLAN, ASN
|
|
|
|
|
|
|
+from ipam.models import ASN, VLAN, VRF
|
|
|
|
|
+from netbox.forms import NetBoxModelBulkEditForm
|
|
|
from tenancy.models import Tenant
|
|
from tenancy.models import Tenant
|
|
|
from utilities.forms import (
|
|
from utilities.forms import (
|
|
|
add_blank_choice, BulkEditForm, BulkEditNullBooleanSelect, ColorField, CommentField, DynamicModelChoiceField,
|
|
add_blank_choice, BulkEditForm, BulkEditNullBooleanSelect, ColorField, CommentField, DynamicModelChoiceField,
|
|
|
- DynamicModelMultipleChoiceField, form_from_model, SmallTextarea, StaticSelect,
|
|
|
|
|
|
|
+ DynamicModelMultipleChoiceField, form_from_model, SmallTextarea, StaticSelect, SelectSpeedWidget,
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
__all__ = (
|
|
__all__ = (
|
|
@@ -31,8 +30,14 @@ __all__ = (
|
|
|
'InterfaceBulkEditForm',
|
|
'InterfaceBulkEditForm',
|
|
|
'InterfaceTemplateBulkEditForm',
|
|
'InterfaceTemplateBulkEditForm',
|
|
|
'InventoryItemBulkEditForm',
|
|
'InventoryItemBulkEditForm',
|
|
|
|
|
+ 'InventoryItemRoleBulkEditForm',
|
|
|
|
|
+ 'InventoryItemTemplateBulkEditForm',
|
|
|
'LocationBulkEditForm',
|
|
'LocationBulkEditForm',
|
|
|
'ManufacturerBulkEditForm',
|
|
'ManufacturerBulkEditForm',
|
|
|
|
|
+ 'ModuleBulkEditForm',
|
|
|
|
|
+ 'ModuleBayBulkEditForm',
|
|
|
|
|
+ 'ModuleBayTemplateBulkEditForm',
|
|
|
|
|
+ 'ModuleTypeBulkEditForm',
|
|
|
'PlatformBulkEditForm',
|
|
'PlatformBulkEditForm',
|
|
|
'PowerFeedBulkEditForm',
|
|
'PowerFeedBulkEditForm',
|
|
|
'PowerOutletBulkEditForm',
|
|
'PowerOutletBulkEditForm',
|
|
@@ -52,11 +57,7 @@ __all__ = (
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
-class RegionBulkEditForm(AddRemoveTagsForm, CustomFieldModelBulkEditForm):
|
|
|
|
|
- pk = forms.ModelMultipleChoiceField(
|
|
|
|
|
- queryset=Region.objects.all(),
|
|
|
|
|
- widget=forms.MultipleHiddenInput
|
|
|
|
|
- )
|
|
|
|
|
|
|
+class RegionBulkEditForm(NetBoxModelBulkEditForm):
|
|
|
parent = DynamicModelChoiceField(
|
|
parent = DynamicModelChoiceField(
|
|
|
queryset=Region.objects.all(),
|
|
queryset=Region.objects.all(),
|
|
|
required=False
|
|
required=False
|
|
@@ -66,15 +67,14 @@ class RegionBulkEditForm(AddRemoveTagsForm, CustomFieldModelBulkEditForm):
|
|
|
required=False
|
|
required=False
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
- class Meta:
|
|
|
|
|
- nullable_fields = ['parent', 'description']
|
|
|
|
|
|
|
+ model = Region
|
|
|
|
|
+ fieldsets = (
|
|
|
|
|
+ (None, ('parent', 'description')),
|
|
|
|
|
+ )
|
|
|
|
|
+ nullable_fields = ('parent', 'description')
|
|
|
|
|
|
|
|
|
|
|
|
|
-class SiteGroupBulkEditForm(AddRemoveTagsForm, CustomFieldModelBulkEditForm):
|
|
|
|
|
- pk = forms.ModelMultipleChoiceField(
|
|
|
|
|
- queryset=SiteGroup.objects.all(),
|
|
|
|
|
- widget=forms.MultipleHiddenInput
|
|
|
|
|
- )
|
|
|
|
|
|
|
+class SiteGroupBulkEditForm(NetBoxModelBulkEditForm):
|
|
|
parent = DynamicModelChoiceField(
|
|
parent = DynamicModelChoiceField(
|
|
|
queryset=SiteGroup.objects.all(),
|
|
queryset=SiteGroup.objects.all(),
|
|
|
required=False
|
|
required=False
|
|
@@ -84,15 +84,14 @@ class SiteGroupBulkEditForm(AddRemoveTagsForm, CustomFieldModelBulkEditForm):
|
|
|
required=False
|
|
required=False
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
- class Meta:
|
|
|
|
|
- nullable_fields = ['parent', 'description']
|
|
|
|
|
|
|
+ model = SiteGroup
|
|
|
|
|
+ fieldsets = (
|
|
|
|
|
+ (None, ('parent', 'description')),
|
|
|
|
|
+ )
|
|
|
|
|
+ nullable_fields = ('parent', 'description')
|
|
|
|
|
|
|
|
|
|
|
|
|
-class SiteBulkEditForm(AddRemoveTagsForm, CustomFieldModelBulkEditForm):
|
|
|
|
|
- pk = forms.ModelMultipleChoiceField(
|
|
|
|
|
- queryset=Site.objects.all(),
|
|
|
|
|
- widget=forms.MultipleHiddenInput
|
|
|
|
|
- )
|
|
|
|
|
|
|
+class SiteBulkEditForm(NetBoxModelBulkEditForm):
|
|
|
status = forms.ChoiceField(
|
|
status = forms.ChoiceField(
|
|
|
choices=add_blank_choice(SiteStatusChoices),
|
|
choices=add_blank_choice(SiteStatusChoices),
|
|
|
required=False,
|
|
required=False,
|
|
@@ -111,12 +110,6 @@ class SiteBulkEditForm(AddRemoveTagsForm, CustomFieldModelBulkEditForm):
|
|
|
queryset=Tenant.objects.all(),
|
|
queryset=Tenant.objects.all(),
|
|
|
required=False
|
|
required=False
|
|
|
)
|
|
)
|
|
|
- asn = forms.IntegerField(
|
|
|
|
|
- min_value=BGP_ASN_MIN,
|
|
|
|
|
- max_value=BGP_ASN_MAX,
|
|
|
|
|
- required=False,
|
|
|
|
|
- label='ASN'
|
|
|
|
|
- )
|
|
|
|
|
asns = DynamicModelMultipleChoiceField(
|
|
asns = DynamicModelMultipleChoiceField(
|
|
|
queryset=ASN.objects.all(),
|
|
queryset=ASN.objects.all(),
|
|
|
label=_('ASNs'),
|
|
label=_('ASNs'),
|
|
@@ -144,18 +137,16 @@ class SiteBulkEditForm(AddRemoveTagsForm, CustomFieldModelBulkEditForm):
|
|
|
widget=StaticSelect()
|
|
widget=StaticSelect()
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
- class Meta:
|
|
|
|
|
- nullable_fields = [
|
|
|
|
|
- 'region', 'group', 'tenant', 'asn', 'asns', 'contact_name', 'contact_phone', 'contact_email', 'description',
|
|
|
|
|
- 'time_zone',
|
|
|
|
|
- ]
|
|
|
|
|
|
|
+ model = Site
|
|
|
|
|
+ fieldsets = (
|
|
|
|
|
+ (None, ('status', 'region', 'group', 'tenant', 'asns', 'time_zone', 'description')),
|
|
|
|
|
+ )
|
|
|
|
|
+ nullable_fields = (
|
|
|
|
|
+ 'region', 'group', 'tenant', 'asns', 'description', 'time_zone',
|
|
|
|
|
+ )
|
|
|
|
|
|
|
|
|
|
|
|
|
-class LocationBulkEditForm(AddRemoveTagsForm, CustomFieldModelBulkEditForm):
|
|
|
|
|
- pk = forms.ModelMultipleChoiceField(
|
|
|
|
|
- queryset=Location.objects.all(),
|
|
|
|
|
- widget=forms.MultipleHiddenInput
|
|
|
|
|
- )
|
|
|
|
|
|
|
+class LocationBulkEditForm(NetBoxModelBulkEditForm):
|
|
|
site = DynamicModelChoiceField(
|
|
site = DynamicModelChoiceField(
|
|
|
queryset=Site.objects.all(),
|
|
queryset=Site.objects.all(),
|
|
|
required=False
|
|
required=False
|
|
@@ -176,15 +167,14 @@ class LocationBulkEditForm(AddRemoveTagsForm, CustomFieldModelBulkEditForm):
|
|
|
required=False
|
|
required=False
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
- class Meta:
|
|
|
|
|
- nullable_fields = ['parent', 'tenant', 'description']
|
|
|
|
|
|
|
+ model = Location
|
|
|
|
|
+ fieldsets = (
|
|
|
|
|
+ (None, ('site', 'parent', 'tenant', 'description')),
|
|
|
|
|
+ )
|
|
|
|
|
+ nullable_fields = ('parent', 'tenant', 'description')
|
|
|
|
|
|
|
|
|
|
|
|
|
-class RackRoleBulkEditForm(AddRemoveTagsForm, CustomFieldModelBulkEditForm):
|
|
|
|
|
- pk = forms.ModelMultipleChoiceField(
|
|
|
|
|
- queryset=RackRole.objects.all(),
|
|
|
|
|
- widget=forms.MultipleHiddenInput
|
|
|
|
|
- )
|
|
|
|
|
|
|
+class RackRoleBulkEditForm(NetBoxModelBulkEditForm):
|
|
|
color = ColorField(
|
|
color = ColorField(
|
|
|
required=False
|
|
required=False
|
|
|
)
|
|
)
|
|
@@ -193,15 +183,14 @@ class RackRoleBulkEditForm(AddRemoveTagsForm, CustomFieldModelBulkEditForm):
|
|
|
required=False
|
|
required=False
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
- class Meta:
|
|
|
|
|
- nullable_fields = ['color', 'description']
|
|
|
|
|
|
|
+ model = RackRole
|
|
|
|
|
+ fieldsets = (
|
|
|
|
|
+ (None, ('color', 'description')),
|
|
|
|
|
+ )
|
|
|
|
|
+ nullable_fields = ('color', 'description')
|
|
|
|
|
|
|
|
|
|
|
|
|
-class RackBulkEditForm(AddRemoveTagsForm, CustomFieldModelBulkEditForm):
|
|
|
|
|
- pk = forms.ModelMultipleChoiceField(
|
|
|
|
|
- queryset=Rack.objects.all(),
|
|
|
|
|
- widget=forms.MultipleHiddenInput
|
|
|
|
|
- )
|
|
|
|
|
|
|
+class RackBulkEditForm(NetBoxModelBulkEditForm):
|
|
|
region = DynamicModelChoiceField(
|
|
region = DynamicModelChoiceField(
|
|
|
queryset=Region.objects.all(),
|
|
queryset=Region.objects.all(),
|
|
|
required=False,
|
|
required=False,
|
|
@@ -291,17 +280,18 @@ class RackBulkEditForm(AddRemoveTagsForm, CustomFieldModelBulkEditForm):
|
|
|
label='Comments'
|
|
label='Comments'
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
- class Meta:
|
|
|
|
|
- nullable_fields = [
|
|
|
|
|
- 'location', 'tenant', 'role', 'serial', 'asset_tag', 'outer_width', 'outer_depth', 'outer_unit', 'comments',
|
|
|
|
|
- ]
|
|
|
|
|
|
|
+ model = Rack
|
|
|
|
|
+ fieldsets = (
|
|
|
|
|
+ ('Rack', ('status', 'role', 'tenant', 'serial', 'asset_tag')),
|
|
|
|
|
+ ('Location', ('region', 'site_group', 'site', 'location')),
|
|
|
|
|
+ ('Hardware', ('type', 'width', 'u_height', 'desc_units', 'outer_width', 'outer_depth', 'outer_unit')),
|
|
|
|
|
+ )
|
|
|
|
|
+ nullable_fields = (
|
|
|
|
|
+ 'location', 'tenant', 'role', 'serial', 'asset_tag', 'outer_width', 'outer_depth', 'outer_unit', 'comments',
|
|
|
|
|
+ )
|
|
|
|
|
|
|
|
|
|
|
|
|
-class RackReservationBulkEditForm(AddRemoveTagsForm, CustomFieldModelBulkEditForm):
|
|
|
|
|
- pk = forms.ModelMultipleChoiceField(
|
|
|
|
|
- queryset=RackReservation.objects.all(),
|
|
|
|
|
- widget=forms.MultipleHiddenInput()
|
|
|
|
|
- )
|
|
|
|
|
|
|
+class RackReservationBulkEditForm(NetBoxModelBulkEditForm):
|
|
|
user = forms.ModelChoiceField(
|
|
user = forms.ModelChoiceField(
|
|
|
queryset=User.objects.order_by(
|
|
queryset=User.objects.order_by(
|
|
|
'username'
|
|
'username'
|
|
@@ -318,33 +308,33 @@ class RackReservationBulkEditForm(AddRemoveTagsForm, CustomFieldModelBulkEditFor
|
|
|
required=False
|
|
required=False
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
- class Meta:
|
|
|
|
|
- nullable_fields = []
|
|
|
|
|
|
|
+ model = RackReservation
|
|
|
|
|
+ fieldsets = (
|
|
|
|
|
+ (None, ('user', 'tenant', 'description')),
|
|
|
|
|
+ )
|
|
|
|
|
|
|
|
|
|
|
|
|
-class ManufacturerBulkEditForm(AddRemoveTagsForm, CustomFieldModelBulkEditForm):
|
|
|
|
|
- pk = forms.ModelMultipleChoiceField(
|
|
|
|
|
- queryset=Manufacturer.objects.all(),
|
|
|
|
|
- widget=forms.MultipleHiddenInput
|
|
|
|
|
- )
|
|
|
|
|
|
|
+class ManufacturerBulkEditForm(NetBoxModelBulkEditForm):
|
|
|
description = forms.CharField(
|
|
description = forms.CharField(
|
|
|
max_length=200,
|
|
max_length=200,
|
|
|
required=False
|
|
required=False
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
- class Meta:
|
|
|
|
|
- nullable_fields = ['description']
|
|
|
|
|
|
|
+ model = Manufacturer
|
|
|
|
|
+ fieldsets = (
|
|
|
|
|
+ (None, ('description',)),
|
|
|
|
|
+ )
|
|
|
|
|
+ nullable_fields = ('description',)
|
|
|
|
|
|
|
|
|
|
|
|
|
-class DeviceTypeBulkEditForm(AddRemoveTagsForm, CustomFieldModelBulkEditForm):
|
|
|
|
|
- pk = forms.ModelMultipleChoiceField(
|
|
|
|
|
- queryset=DeviceType.objects.all(),
|
|
|
|
|
- widget=forms.MultipleHiddenInput()
|
|
|
|
|
- )
|
|
|
|
|
|
|
+class DeviceTypeBulkEditForm(NetBoxModelBulkEditForm):
|
|
|
manufacturer = DynamicModelChoiceField(
|
|
manufacturer = DynamicModelChoiceField(
|
|
|
queryset=Manufacturer.objects.all(),
|
|
queryset=Manufacturer.objects.all(),
|
|
|
required=False
|
|
required=False
|
|
|
)
|
|
)
|
|
|
|
|
+ part_number = forms.CharField(
|
|
|
|
|
+ required=False
|
|
|
|
|
+ )
|
|
|
u_height = forms.IntegerField(
|
|
u_height = forms.IntegerField(
|
|
|
min_value=1,
|
|
min_value=1,
|
|
|
required=False
|
|
required=False
|
|
@@ -360,15 +350,30 @@ class DeviceTypeBulkEditForm(AddRemoveTagsForm, CustomFieldModelBulkEditForm):
|
|
|
widget=StaticSelect()
|
|
widget=StaticSelect()
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
- class Meta:
|
|
|
|
|
- nullable_fields = ['airflow']
|
|
|
|
|
|
|
+ model = DeviceType
|
|
|
|
|
+ fieldsets = (
|
|
|
|
|
+ (None, ('manufacturer', 'part_number', 'u_height', 'is_full_depth', 'airflow')),
|
|
|
|
|
+ )
|
|
|
|
|
+ nullable_fields = ('part_number', 'airflow')
|
|
|
|
|
|
|
|
|
|
|
|
|
-class DeviceRoleBulkEditForm(AddRemoveTagsForm, CustomFieldModelBulkEditForm):
|
|
|
|
|
- pk = forms.ModelMultipleChoiceField(
|
|
|
|
|
- queryset=DeviceRole.objects.all(),
|
|
|
|
|
- widget=forms.MultipleHiddenInput
|
|
|
|
|
|
|
+class ModuleTypeBulkEditForm(NetBoxModelBulkEditForm):
|
|
|
|
|
+ manufacturer = DynamicModelChoiceField(
|
|
|
|
|
+ queryset=Manufacturer.objects.all(),
|
|
|
|
|
+ required=False
|
|
|
)
|
|
)
|
|
|
|
|
+ part_number = forms.CharField(
|
|
|
|
|
+ required=False
|
|
|
|
|
+ )
|
|
|
|
|
+
|
|
|
|
|
+ model = ModuleType
|
|
|
|
|
+ fieldsets = (
|
|
|
|
|
+ (None, ('manufacturer', 'part_number')),
|
|
|
|
|
+ )
|
|
|
|
|
+ nullable_fields = ('part_number',)
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+class DeviceRoleBulkEditForm(NetBoxModelBulkEditForm):
|
|
|
color = ColorField(
|
|
color = ColorField(
|
|
|
required=False
|
|
required=False
|
|
|
)
|
|
)
|
|
@@ -382,15 +387,14 @@ class DeviceRoleBulkEditForm(AddRemoveTagsForm, CustomFieldModelBulkEditForm):
|
|
|
required=False
|
|
required=False
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
- class Meta:
|
|
|
|
|
- nullable_fields = ['color', 'description']
|
|
|
|
|
|
|
+ model = DeviceRole
|
|
|
|
|
+ fieldsets = (
|
|
|
|
|
+ (None, ('color', 'vm_role', 'description')),
|
|
|
|
|
+ )
|
|
|
|
|
+ nullable_fields = ('color', 'description')
|
|
|
|
|
|
|
|
|
|
|
|
|
-class PlatformBulkEditForm(AddRemoveTagsForm, CustomFieldModelBulkEditForm):
|
|
|
|
|
- pk = forms.ModelMultipleChoiceField(
|
|
|
|
|
- queryset=Platform.objects.all(),
|
|
|
|
|
- widget=forms.MultipleHiddenInput
|
|
|
|
|
- )
|
|
|
|
|
|
|
+class PlatformBulkEditForm(NetBoxModelBulkEditForm):
|
|
|
manufacturer = DynamicModelChoiceField(
|
|
manufacturer = DynamicModelChoiceField(
|
|
|
queryset=Manufacturer.objects.all(),
|
|
queryset=Manufacturer.objects.all(),
|
|
|
required=False
|
|
required=False
|
|
@@ -405,15 +409,14 @@ class PlatformBulkEditForm(AddRemoveTagsForm, CustomFieldModelBulkEditForm):
|
|
|
required=False
|
|
required=False
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
- class Meta:
|
|
|
|
|
- nullable_fields = ['manufacturer', 'napalm_driver', 'description']
|
|
|
|
|
|
|
+ model = Platform
|
|
|
|
|
+ fieldsets = (
|
|
|
|
|
+ (None, ('manufacturer', 'napalm_driver', 'description')),
|
|
|
|
|
+ )
|
|
|
|
|
+ nullable_fields = ('manufacturer', 'napalm_driver', 'description')
|
|
|
|
|
|
|
|
|
|
|
|
|
-class DeviceBulkEditForm(AddRemoveTagsForm, CustomFieldModelBulkEditForm):
|
|
|
|
|
- pk = forms.ModelMultipleChoiceField(
|
|
|
|
|
- queryset=Device.objects.all(),
|
|
|
|
|
- widget=forms.MultipleHiddenInput()
|
|
|
|
|
- )
|
|
|
|
|
|
|
+class DeviceBulkEditForm(NetBoxModelBulkEditForm):
|
|
|
manufacturer = DynamicModelChoiceField(
|
|
manufacturer = DynamicModelChoiceField(
|
|
|
queryset=Manufacturer.objects.all(),
|
|
queryset=Manufacturer.objects.all(),
|
|
|
required=False
|
|
required=False
|
|
@@ -464,17 +467,43 @@ class DeviceBulkEditForm(AddRemoveTagsForm, CustomFieldModelBulkEditForm):
|
|
|
label='Serial Number'
|
|
label='Serial Number'
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
- class Meta:
|
|
|
|
|
- nullable_fields = [
|
|
|
|
|
- 'tenant', 'platform', 'serial', 'airflow',
|
|
|
|
|
- ]
|
|
|
|
|
|
|
+ model = Device
|
|
|
|
|
+ fieldsets = (
|
|
|
|
|
+ ('Device', ('device_role', 'status', 'tenant', 'platform')),
|
|
|
|
|
+ ('Location', ('site', 'location')),
|
|
|
|
|
+ ('Hardware', ('manufacturer', 'device_type', 'airflow', 'serial')),
|
|
|
|
|
+ )
|
|
|
|
|
+ nullable_fields = (
|
|
|
|
|
+ 'tenant', 'platform', 'serial', 'airflow',
|
|
|
|
|
+ )
|
|
|
|
|
|
|
|
|
|
|
|
|
-class CableBulkEditForm(AddRemoveTagsForm, CustomFieldModelBulkEditForm):
|
|
|
|
|
- pk = forms.ModelMultipleChoiceField(
|
|
|
|
|
- queryset=Cable.objects.all(),
|
|
|
|
|
- widget=forms.MultipleHiddenInput
|
|
|
|
|
|
|
+class ModuleBulkEditForm(NetBoxModelBulkEditForm):
|
|
|
|
|
+ manufacturer = DynamicModelChoiceField(
|
|
|
|
|
+ queryset=Manufacturer.objects.all(),
|
|
|
|
|
+ required=False
|
|
|
|
|
+ )
|
|
|
|
|
+ module_type = DynamicModelChoiceField(
|
|
|
|
|
+ queryset=ModuleType.objects.all(),
|
|
|
|
|
+ required=False,
|
|
|
|
|
+ query_params={
|
|
|
|
|
+ 'manufacturer_id': '$manufacturer'
|
|
|
|
|
+ }
|
|
|
|
|
+ )
|
|
|
|
|
+ serial = forms.CharField(
|
|
|
|
|
+ max_length=50,
|
|
|
|
|
+ required=False,
|
|
|
|
|
+ label='Serial Number'
|
|
|
|
|
+ )
|
|
|
|
|
+
|
|
|
|
|
+ model = Module
|
|
|
|
|
+ fieldsets = (
|
|
|
|
|
+ (None, ('manufacturer', 'module_type', 'serial')),
|
|
|
)
|
|
)
|
|
|
|
|
+ nullable_fields = ('serial',)
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+class CableBulkEditForm(NetBoxModelBulkEditForm):
|
|
|
type = forms.ChoiceField(
|
|
type = forms.ChoiceField(
|
|
|
choices=add_blank_choice(CableTypeChoices),
|
|
choices=add_blank_choice(CableTypeChoices),
|
|
|
required=False,
|
|
required=False,
|
|
@@ -509,10 +538,14 @@ class CableBulkEditForm(AddRemoveTagsForm, CustomFieldModelBulkEditForm):
|
|
|
widget=StaticSelect()
|
|
widget=StaticSelect()
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
- class Meta:
|
|
|
|
|
- nullable_fields = [
|
|
|
|
|
- 'type', 'status', 'tenant', 'label', 'color', 'length',
|
|
|
|
|
- ]
|
|
|
|
|
|
|
+ model = Cable
|
|
|
|
|
+ fieldsets = (
|
|
|
|
|
+ (None, ('type', 'status', 'tenant', 'label')),
|
|
|
|
|
+ ('Attributes', ('color', 'length', 'length_unit')),
|
|
|
|
|
+ )
|
|
|
|
|
+ nullable_fields = (
|
|
|
|
|
+ 'type', 'status', 'tenant', 'label', 'color', 'length',
|
|
|
|
|
+ )
|
|
|
|
|
|
|
|
def clean(self):
|
|
def clean(self):
|
|
|
super().clean()
|
|
super().clean()
|
|
@@ -526,25 +559,20 @@ class CableBulkEditForm(AddRemoveTagsForm, CustomFieldModelBulkEditForm):
|
|
|
})
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
|
-class VirtualChassisBulkEditForm(AddRemoveTagsForm, CustomFieldModelBulkEditForm):
|
|
|
|
|
- pk = forms.ModelMultipleChoiceField(
|
|
|
|
|
- queryset=VirtualChassis.objects.all(),
|
|
|
|
|
- widget=forms.MultipleHiddenInput()
|
|
|
|
|
- )
|
|
|
|
|
|
|
+class VirtualChassisBulkEditForm(NetBoxModelBulkEditForm):
|
|
|
domain = forms.CharField(
|
|
domain = forms.CharField(
|
|
|
max_length=30,
|
|
max_length=30,
|
|
|
required=False
|
|
required=False
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
- class Meta:
|
|
|
|
|
- nullable_fields = ['domain']
|
|
|
|
|
|
|
+ model = VirtualChassis
|
|
|
|
|
+ fieldsets = (
|
|
|
|
|
+ (None, ('domain',)),
|
|
|
|
|
+ )
|
|
|
|
|
+ nullable_fields = ('domain',)
|
|
|
|
|
|
|
|
|
|
|
|
|
-class PowerPanelBulkEditForm(AddRemoveTagsForm, CustomFieldModelBulkEditForm):
|
|
|
|
|
- pk = forms.ModelMultipleChoiceField(
|
|
|
|
|
- queryset=PowerPanel.objects.all(),
|
|
|
|
|
- widget=forms.MultipleHiddenInput
|
|
|
|
|
- )
|
|
|
|
|
|
|
+class PowerPanelBulkEditForm(NetBoxModelBulkEditForm):
|
|
|
region = DynamicModelChoiceField(
|
|
region = DynamicModelChoiceField(
|
|
|
queryset=Region.objects.all(),
|
|
queryset=Region.objects.all(),
|
|
|
required=False,
|
|
required=False,
|
|
@@ -575,15 +603,14 @@ class PowerPanelBulkEditForm(AddRemoveTagsForm, CustomFieldModelBulkEditForm):
|
|
|
}
|
|
}
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
- class Meta:
|
|
|
|
|
- nullable_fields = ['location']
|
|
|
|
|
|
|
+ model = PowerPanel
|
|
|
|
|
+ fieldsets = (
|
|
|
|
|
+ (None, ('region', 'site_group', 'site', 'location')),
|
|
|
|
|
+ )
|
|
|
|
|
+ nullable_fields = ('location',)
|
|
|
|
|
|
|
|
|
|
|
|
|
-class PowerFeedBulkEditForm(AddRemoveTagsForm, CustomFieldModelBulkEditForm):
|
|
|
|
|
- pk = forms.ModelMultipleChoiceField(
|
|
|
|
|
- queryset=PowerFeed.objects.all(),
|
|
|
|
|
- widget=forms.MultipleHiddenInput
|
|
|
|
|
- )
|
|
|
|
|
|
|
+class PowerFeedBulkEditForm(NetBoxModelBulkEditForm):
|
|
|
power_panel = DynamicModelChoiceField(
|
|
power_panel = DynamicModelChoiceField(
|
|
|
queryset=PowerPanel.objects.all(),
|
|
queryset=PowerPanel.objects.all(),
|
|
|
required=False
|
|
required=False
|
|
@@ -634,10 +661,12 @@ class PowerFeedBulkEditForm(AddRemoveTagsForm, CustomFieldModelBulkEditForm):
|
|
|
label='Comments'
|
|
label='Comments'
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
- class Meta:
|
|
|
|
|
- nullable_fields = [
|
|
|
|
|
- 'location', 'comments',
|
|
|
|
|
- ]
|
|
|
|
|
|
|
+ model = PowerFeed
|
|
|
|
|
+ fieldsets = (
|
|
|
|
|
+ (None, ('power_panel', 'rack', 'status', 'type', 'mark_connected')),
|
|
|
|
|
+ ('Power', ('supply', 'phase', 'voltage', 'amperage', 'max_utilization'))
|
|
|
|
|
+ )
|
|
|
|
|
+ nullable_fields = ('location', 'comments')
|
|
|
|
|
|
|
|
|
|
|
|
|
#
|
|
#
|
|
@@ -659,8 +688,7 @@ class ConsolePortTemplateBulkEditForm(BulkEditForm):
|
|
|
widget=StaticSelect()
|
|
widget=StaticSelect()
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
- class Meta:
|
|
|
|
|
- nullable_fields = ('label', 'type', 'description')
|
|
|
|
|
|
|
+ nullable_fields = ('label', 'type', 'description')
|
|
|
|
|
|
|
|
|
|
|
|
|
class ConsoleServerPortTemplateBulkEditForm(BulkEditForm):
|
|
class ConsoleServerPortTemplateBulkEditForm(BulkEditForm):
|
|
@@ -681,8 +709,7 @@ class ConsoleServerPortTemplateBulkEditForm(BulkEditForm):
|
|
|
required=False
|
|
required=False
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
- class Meta:
|
|
|
|
|
- nullable_fields = ('label', 'type', 'description')
|
|
|
|
|
|
|
+ nullable_fields = ('label', 'type', 'description')
|
|
|
|
|
|
|
|
|
|
|
|
|
class PowerPortTemplateBulkEditForm(BulkEditForm):
|
|
class PowerPortTemplateBulkEditForm(BulkEditForm):
|
|
@@ -713,8 +740,7 @@ class PowerPortTemplateBulkEditForm(BulkEditForm):
|
|
|
required=False
|
|
required=False
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
- class Meta:
|
|
|
|
|
- nullable_fields = ('label', 'type', 'maximum_draw', 'allocated_draw', 'description')
|
|
|
|
|
|
|
+ nullable_fields = ('label', 'type', 'maximum_draw', 'allocated_draw', 'description')
|
|
|
|
|
|
|
|
|
|
|
|
|
class PowerOutletTemplateBulkEditForm(BulkEditForm):
|
|
class PowerOutletTemplateBulkEditForm(BulkEditForm):
|
|
@@ -750,8 +776,7 @@ class PowerOutletTemplateBulkEditForm(BulkEditForm):
|
|
|
required=False
|
|
required=False
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
- class Meta:
|
|
|
|
|
- nullable_fields = ('label', 'type', 'power_port', 'feed_leg', 'description')
|
|
|
|
|
|
|
+ nullable_fields = ('label', 'type', 'power_port', 'feed_leg', 'description')
|
|
|
|
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
def __init__(self, *args, **kwargs):
|
|
|
super().__init__(*args, **kwargs)
|
|
super().__init__(*args, **kwargs)
|
|
@@ -788,8 +813,7 @@ class InterfaceTemplateBulkEditForm(BulkEditForm):
|
|
|
required=False
|
|
required=False
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
- class Meta:
|
|
|
|
|
- nullable_fields = ('label', 'description')
|
|
|
|
|
|
|
+ nullable_fields = ('label', 'description')
|
|
|
|
|
|
|
|
|
|
|
|
|
class FrontPortTemplateBulkEditForm(BulkEditForm):
|
|
class FrontPortTemplateBulkEditForm(BulkEditForm):
|
|
@@ -813,8 +837,7 @@ class FrontPortTemplateBulkEditForm(BulkEditForm):
|
|
|
required=False
|
|
required=False
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
- class Meta:
|
|
|
|
|
- nullable_fields = ('description',)
|
|
|
|
|
|
|
+ nullable_fields = ('description',)
|
|
|
|
|
|
|
|
|
|
|
|
|
class RearPortTemplateBulkEditForm(BulkEditForm):
|
|
class RearPortTemplateBulkEditForm(BulkEditForm):
|
|
@@ -838,8 +861,23 @@ class RearPortTemplateBulkEditForm(BulkEditForm):
|
|
|
required=False
|
|
required=False
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
- class Meta:
|
|
|
|
|
- nullable_fields = ('description',)
|
|
|
|
|
|
|
+ nullable_fields = ('description',)
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+class ModuleBayTemplateBulkEditForm(BulkEditForm):
|
|
|
|
|
+ pk = forms.ModelMultipleChoiceField(
|
|
|
|
|
+ queryset=ModuleBayTemplate.objects.all(),
|
|
|
|
|
+ widget=forms.MultipleHiddenInput()
|
|
|
|
|
+ )
|
|
|
|
|
+ label = forms.CharField(
|
|
|
|
|
+ max_length=64,
|
|
|
|
|
+ required=False
|
|
|
|
|
+ )
|
|
|
|
|
+ description = forms.CharField(
|
|
|
|
|
+ required=False
|
|
|
|
|
+ )
|
|
|
|
|
+
|
|
|
|
|
+ nullable_fields = ('label', 'position', 'description')
|
|
|
|
|
|
|
|
|
|
|
|
|
class DeviceBayTemplateBulkEditForm(BulkEditForm):
|
|
class DeviceBayTemplateBulkEditForm(BulkEditForm):
|
|
@@ -855,90 +893,125 @@ class DeviceBayTemplateBulkEditForm(BulkEditForm):
|
|
|
required=False
|
|
required=False
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
- class Meta:
|
|
|
|
|
- nullable_fields = ('label', 'description')
|
|
|
|
|
|
|
+ nullable_fields = ('label', 'description')
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+class InventoryItemTemplateBulkEditForm(BulkEditForm):
|
|
|
|
|
+ pk = forms.ModelMultipleChoiceField(
|
|
|
|
|
+ queryset=InventoryItemTemplate.objects.all(),
|
|
|
|
|
+ widget=forms.MultipleHiddenInput()
|
|
|
|
|
+ )
|
|
|
|
|
+ label = forms.CharField(
|
|
|
|
|
+ max_length=64,
|
|
|
|
|
+ required=False
|
|
|
|
|
+ )
|
|
|
|
|
+ description = forms.CharField(
|
|
|
|
|
+ required=False
|
|
|
|
|
+ )
|
|
|
|
|
+ role = DynamicModelChoiceField(
|
|
|
|
|
+ queryset=InventoryItemRole.objects.all(),
|
|
|
|
|
+ required=False
|
|
|
|
|
+ )
|
|
|
|
|
+ manufacturer = DynamicModelChoiceField(
|
|
|
|
|
+ queryset=Manufacturer.objects.all(),
|
|
|
|
|
+ required=False
|
|
|
|
|
+ )
|
|
|
|
|
+
|
|
|
|
|
+ nullable_fields = ('label', 'role', 'manufacturer', 'part_id', 'description')
|
|
|
|
|
|
|
|
|
|
|
|
|
#
|
|
#
|
|
|
# Device components
|
|
# Device components
|
|
|
#
|
|
#
|
|
|
|
|
|
|
|
|
|
+class ComponentBulkEditForm(NetBoxModelBulkEditForm):
|
|
|
|
|
+ device = forms.ModelChoiceField(
|
|
|
|
|
+ queryset=Device.objects.all(),
|
|
|
|
|
+ required=False,
|
|
|
|
|
+ disabled=True,
|
|
|
|
|
+ widget=forms.HiddenInput()
|
|
|
|
|
+ )
|
|
|
|
|
+ module = forms.ModelChoiceField(
|
|
|
|
|
+ queryset=Module.objects.all(),
|
|
|
|
|
+ required=False
|
|
|
|
|
+ )
|
|
|
|
|
+
|
|
|
|
|
+ def __init__(self, *args, **kwargs):
|
|
|
|
|
+ super().__init__(*args, **kwargs)
|
|
|
|
|
+
|
|
|
|
|
+ # Limit module queryset to Modules which belong to the parent Device
|
|
|
|
|
+ if 'device' in self.initial:
|
|
|
|
|
+ device = Device.objects.filter(pk=self.initial['device']).first()
|
|
|
|
|
+ self.fields['module'].queryset = Module.objects.filter(device=device)
|
|
|
|
|
+ else:
|
|
|
|
|
+ self.fields['module'].choices = ()
|
|
|
|
|
+ self.fields['module'].widget.attrs['disabled'] = True
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
class ConsolePortBulkEditForm(
|
|
class ConsolePortBulkEditForm(
|
|
|
form_from_model(ConsolePort, ['label', 'type', 'speed', 'mark_connected', 'description']),
|
|
form_from_model(ConsolePort, ['label', 'type', 'speed', 'mark_connected', 'description']),
|
|
|
- AddRemoveTagsForm,
|
|
|
|
|
- CustomFieldModelBulkEditForm
|
|
|
|
|
|
|
+ ComponentBulkEditForm
|
|
|
):
|
|
):
|
|
|
- pk = forms.ModelMultipleChoiceField(
|
|
|
|
|
- queryset=ConsolePort.objects.all(),
|
|
|
|
|
- widget=forms.MultipleHiddenInput()
|
|
|
|
|
- )
|
|
|
|
|
mark_connected = forms.NullBooleanField(
|
|
mark_connected = forms.NullBooleanField(
|
|
|
required=False,
|
|
required=False,
|
|
|
widget=BulkEditNullBooleanSelect
|
|
widget=BulkEditNullBooleanSelect
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
- class Meta:
|
|
|
|
|
- nullable_fields = ['label', 'description']
|
|
|
|
|
|
|
+ model = ConsolePort
|
|
|
|
|
+ fieldsets = (
|
|
|
|
|
+ (None, ('module', 'type', 'label', 'speed', 'description', 'mark_connected')),
|
|
|
|
|
+ )
|
|
|
|
|
+ nullable_fields = ('module', 'label', 'description')
|
|
|
|
|
|
|
|
|
|
|
|
|
class ConsoleServerPortBulkEditForm(
|
|
class ConsoleServerPortBulkEditForm(
|
|
|
form_from_model(ConsoleServerPort, ['label', 'type', 'speed', 'mark_connected', 'description']),
|
|
form_from_model(ConsoleServerPort, ['label', 'type', 'speed', 'mark_connected', 'description']),
|
|
|
- AddRemoveTagsForm,
|
|
|
|
|
- CustomFieldModelBulkEditForm
|
|
|
|
|
|
|
+ ComponentBulkEditForm
|
|
|
):
|
|
):
|
|
|
- pk = forms.ModelMultipleChoiceField(
|
|
|
|
|
- queryset=ConsoleServerPort.objects.all(),
|
|
|
|
|
- widget=forms.MultipleHiddenInput()
|
|
|
|
|
- )
|
|
|
|
|
mark_connected = forms.NullBooleanField(
|
|
mark_connected = forms.NullBooleanField(
|
|
|
required=False,
|
|
required=False,
|
|
|
widget=BulkEditNullBooleanSelect
|
|
widget=BulkEditNullBooleanSelect
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
- class Meta:
|
|
|
|
|
- nullable_fields = ['label', 'description']
|
|
|
|
|
|
|
+ model = ConsoleServerPort
|
|
|
|
|
+ fieldsets = (
|
|
|
|
|
+ (None, ('module', 'type', 'label', 'speed', 'description', 'mark_connected')),
|
|
|
|
|
+ )
|
|
|
|
|
+ nullable_fields = ('module', 'label', 'description')
|
|
|
|
|
|
|
|
|
|
|
|
|
class PowerPortBulkEditForm(
|
|
class PowerPortBulkEditForm(
|
|
|
form_from_model(PowerPort, ['label', 'type', 'maximum_draw', 'allocated_draw', 'mark_connected', 'description']),
|
|
form_from_model(PowerPort, ['label', 'type', 'maximum_draw', 'allocated_draw', 'mark_connected', 'description']),
|
|
|
- AddRemoveTagsForm,
|
|
|
|
|
- CustomFieldModelBulkEditForm
|
|
|
|
|
|
|
+ ComponentBulkEditForm
|
|
|
):
|
|
):
|
|
|
- pk = forms.ModelMultipleChoiceField(
|
|
|
|
|
- queryset=PowerPort.objects.all(),
|
|
|
|
|
- widget=forms.MultipleHiddenInput()
|
|
|
|
|
- )
|
|
|
|
|
mark_connected = forms.NullBooleanField(
|
|
mark_connected = forms.NullBooleanField(
|
|
|
required=False,
|
|
required=False,
|
|
|
widget=BulkEditNullBooleanSelect
|
|
widget=BulkEditNullBooleanSelect
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
- class Meta:
|
|
|
|
|
- nullable_fields = ['label', 'description']
|
|
|
|
|
|
|
+ model = PowerPort
|
|
|
|
|
+ fieldsets = (
|
|
|
|
|
+ (None, ('module', 'type', 'label', 'description', 'mark_connected')),
|
|
|
|
|
+ ('Power', ('maximum_draw', 'allocated_draw')),
|
|
|
|
|
+ )
|
|
|
|
|
+ nullable_fields = ('module', 'label', 'description')
|
|
|
|
|
|
|
|
|
|
|
|
|
class PowerOutletBulkEditForm(
|
|
class PowerOutletBulkEditForm(
|
|
|
form_from_model(PowerOutlet, ['label', 'type', 'feed_leg', 'power_port', 'mark_connected', 'description']),
|
|
form_from_model(PowerOutlet, ['label', 'type', 'feed_leg', 'power_port', 'mark_connected', 'description']),
|
|
|
- AddRemoveTagsForm,
|
|
|
|
|
- CustomFieldModelBulkEditForm
|
|
|
|
|
|
|
+ ComponentBulkEditForm
|
|
|
):
|
|
):
|
|
|
- pk = forms.ModelMultipleChoiceField(
|
|
|
|
|
- queryset=PowerOutlet.objects.all(),
|
|
|
|
|
- widget=forms.MultipleHiddenInput()
|
|
|
|
|
- )
|
|
|
|
|
- device = forms.ModelChoiceField(
|
|
|
|
|
- queryset=Device.objects.all(),
|
|
|
|
|
- required=False,
|
|
|
|
|
- disabled=True,
|
|
|
|
|
- widget=forms.HiddenInput()
|
|
|
|
|
- )
|
|
|
|
|
mark_connected = forms.NullBooleanField(
|
|
mark_connected = forms.NullBooleanField(
|
|
|
required=False,
|
|
required=False,
|
|
|
widget=BulkEditNullBooleanSelect
|
|
widget=BulkEditNullBooleanSelect
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
- class Meta:
|
|
|
|
|
- nullable_fields = ['label', 'type', 'feed_leg', 'power_port', 'description']
|
|
|
|
|
|
|
+ model = PowerOutlet
|
|
|
|
|
+ fieldsets = (
|
|
|
|
|
+ (None, ('module', 'type', 'label', 'description', 'mark_connected')),
|
|
|
|
|
+ ('Power', ('feed_leg', 'power_port')),
|
|
|
|
|
+ )
|
|
|
|
|
+ nullable_fields = ('module', 'label', 'type', 'feed_leg', 'power_port', 'description')
|
|
|
|
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
def __init__(self, *args, **kwargs):
|
|
|
super().__init__(*args, **kwargs)
|
|
super().__init__(*args, **kwargs)
|
|
@@ -954,22 +1027,12 @@ class PowerOutletBulkEditForm(
|
|
|
|
|
|
|
|
class InterfaceBulkEditForm(
|
|
class InterfaceBulkEditForm(
|
|
|
form_from_model(Interface, [
|
|
form_from_model(Interface, [
|
|
|
- 'label', 'type', 'parent', 'bridge', 'lag', 'mac_address', 'wwn', 'mtu', 'mgmt_only', 'mark_connected',
|
|
|
|
|
- 'description', 'mode', 'rf_role', 'rf_channel', 'rf_channel_frequency', 'rf_channel_width', 'tx_power',
|
|
|
|
|
|
|
+ 'label', 'type', 'parent', 'bridge', 'lag', 'speed', 'duplex', 'mac_address', 'wwn', 'mtu', 'mgmt_only',
|
|
|
|
|
+ 'mark_connected', 'description', 'mode', 'rf_role', 'rf_channel', 'rf_channel_frequency', 'rf_channel_width',
|
|
|
|
|
+ 'tx_power',
|
|
|
]),
|
|
]),
|
|
|
- AddRemoveTagsForm,
|
|
|
|
|
- CustomFieldModelBulkEditForm
|
|
|
|
|
|
|
+ ComponentBulkEditForm
|
|
|
):
|
|
):
|
|
|
- pk = forms.ModelMultipleChoiceField(
|
|
|
|
|
- queryset=Interface.objects.all(),
|
|
|
|
|
- widget=forms.MultipleHiddenInput()
|
|
|
|
|
- )
|
|
|
|
|
- device = forms.ModelChoiceField(
|
|
|
|
|
- queryset=Device.objects.all(),
|
|
|
|
|
- required=False,
|
|
|
|
|
- disabled=True,
|
|
|
|
|
- widget=forms.HiddenInput()
|
|
|
|
|
- )
|
|
|
|
|
enabled = forms.NullBooleanField(
|
|
enabled = forms.NullBooleanField(
|
|
|
required=False,
|
|
required=False,
|
|
|
widget=BulkEditNullBooleanSelect
|
|
widget=BulkEditNullBooleanSelect
|
|
@@ -987,7 +1050,13 @@ class InterfaceBulkEditForm(
|
|
|
required=False,
|
|
required=False,
|
|
|
query_params={
|
|
query_params={
|
|
|
'type': 'lag',
|
|
'type': 'lag',
|
|
|
- }
|
|
|
|
|
|
|
+ },
|
|
|
|
|
+ label='LAG'
|
|
|
|
|
+ )
|
|
|
|
|
+ speed = forms.IntegerField(
|
|
|
|
|
+ required=False,
|
|
|
|
|
+ widget=SelectSpeedWidget(),
|
|
|
|
|
+ label='Speed'
|
|
|
)
|
|
)
|
|
|
mgmt_only = forms.NullBooleanField(
|
|
mgmt_only = forms.NullBooleanField(
|
|
|
required=False,
|
|
required=False,
|
|
@@ -1006,12 +1075,26 @@ class InterfaceBulkEditForm(
|
|
|
queryset=VLAN.objects.all(),
|
|
queryset=VLAN.objects.all(),
|
|
|
required=False
|
|
required=False
|
|
|
)
|
|
)
|
|
|
|
|
+ vrf = DynamicModelChoiceField(
|
|
|
|
|
+ queryset=VRF.objects.all(),
|
|
|
|
|
+ required=False,
|
|
|
|
|
+ label='VRF'
|
|
|
|
|
+ )
|
|
|
|
|
|
|
|
- class Meta:
|
|
|
|
|
- nullable_fields = [
|
|
|
|
|
- 'label', 'parent', 'bridge', 'lag', 'mac_address', 'wwn', 'mtu', 'description', 'mode', 'rf_channel',
|
|
|
|
|
- 'rf_channel_frequency', 'rf_channel_width', 'tx_power', 'untagged_vlan', 'tagged_vlans',
|
|
|
|
|
- ]
|
|
|
|
|
|
|
+ model = Interface
|
|
|
|
|
+ fieldsets = (
|
|
|
|
|
+ (None, ('module', 'type', 'label', 'speed', 'duplex', 'description')),
|
|
|
|
|
+ ('Addressing', ('vrf', 'mac_address', 'wwn')),
|
|
|
|
|
+ ('Operation', ('mtu', 'tx_power', 'enabled', 'mgmt_only', 'mark_connected')),
|
|
|
|
|
+ ('Related Interfaces', ('parent', 'bridge', 'lag')),
|
|
|
|
|
+ ('802.1Q Switching', ('mode', 'untagged_vlan', 'tagged_vlans')),
|
|
|
|
|
+ ('Wireless', ('rf_role', 'rf_channel', 'rf_channel_frequency', 'rf_channel_width')),
|
|
|
|
|
+ )
|
|
|
|
|
+ nullable_fields = (
|
|
|
|
|
+ 'module', 'label', 'parent', 'bridge', 'lag', 'speed', 'duplex', 'mac_address', 'wwn', 'mtu', 'description',
|
|
|
|
|
+ 'mode', 'rf_channel', 'rf_channel_frequency', 'rf_channel_width', 'tx_power', 'untagged_vlan', 'tagged_vlans',
|
|
|
|
|
+ 'vrf',
|
|
|
|
|
+ )
|
|
|
|
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
def __init__(self, *args, **kwargs):
|
|
|
super().__init__(*args, **kwargs)
|
|
super().__init__(*args, **kwargs)
|
|
@@ -1075,59 +1158,83 @@ class InterfaceBulkEditForm(
|
|
|
|
|
|
|
|
class FrontPortBulkEditForm(
|
|
class FrontPortBulkEditForm(
|
|
|
form_from_model(FrontPort, ['label', 'type', 'color', 'mark_connected', 'description']),
|
|
form_from_model(FrontPort, ['label', 'type', 'color', 'mark_connected', 'description']),
|
|
|
- AddRemoveTagsForm,
|
|
|
|
|
- CustomFieldModelBulkEditForm
|
|
|
|
|
|
|
+ ComponentBulkEditForm
|
|
|
):
|
|
):
|
|
|
- pk = forms.ModelMultipleChoiceField(
|
|
|
|
|
- queryset=FrontPort.objects.all(),
|
|
|
|
|
- widget=forms.MultipleHiddenInput()
|
|
|
|
|
|
|
+ model = FrontPort
|
|
|
|
|
+ fieldsets = (
|
|
|
|
|
+ (None, ('module', 'type', 'label', 'color', 'description', 'mark_connected')),
|
|
|
)
|
|
)
|
|
|
-
|
|
|
|
|
- class Meta:
|
|
|
|
|
- nullable_fields = ['label', 'description']
|
|
|
|
|
|
|
+ nullable_fields = ('module', 'label', 'description')
|
|
|
|
|
|
|
|
|
|
|
|
|
class RearPortBulkEditForm(
|
|
class RearPortBulkEditForm(
|
|
|
form_from_model(RearPort, ['label', 'type', 'color', 'mark_connected', 'description']),
|
|
form_from_model(RearPort, ['label', 'type', 'color', 'mark_connected', 'description']),
|
|
|
- AddRemoveTagsForm,
|
|
|
|
|
- CustomFieldModelBulkEditForm
|
|
|
|
|
|
|
+ ComponentBulkEditForm
|
|
|
):
|
|
):
|
|
|
- pk = forms.ModelMultipleChoiceField(
|
|
|
|
|
- queryset=RearPort.objects.all(),
|
|
|
|
|
- widget=forms.MultipleHiddenInput()
|
|
|
|
|
|
|
+ model = RearPort
|
|
|
|
|
+ fieldsets = (
|
|
|
|
|
+ (None, ('module', 'type', 'label', 'color', 'description', 'mark_connected')),
|
|
|
)
|
|
)
|
|
|
|
|
+ nullable_fields = ('module', 'label', 'description')
|
|
|
|
|
+
|
|
|
|
|
|
|
|
- class Meta:
|
|
|
|
|
- nullable_fields = ['label', 'description']
|
|
|
|
|
|
|
+class ModuleBayBulkEditForm(
|
|
|
|
|
+ form_from_model(ModuleBay, ['label', 'position', 'description']),
|
|
|
|
|
+ NetBoxModelBulkEditForm
|
|
|
|
|
+):
|
|
|
|
|
+ model = ModuleBay
|
|
|
|
|
+ fieldsets = (
|
|
|
|
|
+ (None, ('label', 'position', 'description')),
|
|
|
|
|
+ )
|
|
|
|
|
+ nullable_fields = ('label', 'position', 'description')
|
|
|
|
|
|
|
|
|
|
|
|
|
class DeviceBayBulkEditForm(
|
|
class DeviceBayBulkEditForm(
|
|
|
form_from_model(DeviceBay, ['label', 'description']),
|
|
form_from_model(DeviceBay, ['label', 'description']),
|
|
|
- AddRemoveTagsForm,
|
|
|
|
|
- CustomFieldModelBulkEditForm
|
|
|
|
|
|
|
+ NetBoxModelBulkEditForm
|
|
|
):
|
|
):
|
|
|
- pk = forms.ModelMultipleChoiceField(
|
|
|
|
|
- queryset=DeviceBay.objects.all(),
|
|
|
|
|
- widget=forms.MultipleHiddenInput()
|
|
|
|
|
|
|
+ model = DeviceBay
|
|
|
|
|
+ fieldsets = (
|
|
|
|
|
+ (None, ('label', 'description')),
|
|
|
)
|
|
)
|
|
|
-
|
|
|
|
|
- class Meta:
|
|
|
|
|
- nullable_fields = ['label', 'description']
|
|
|
|
|
|
|
+ nullable_fields = ('label', 'description')
|
|
|
|
|
|
|
|
|
|
|
|
|
class InventoryItemBulkEditForm(
|
|
class InventoryItemBulkEditForm(
|
|
|
- form_from_model(InventoryItem, ['label', 'manufacturer', 'part_id', 'description']),
|
|
|
|
|
- AddRemoveTagsForm,
|
|
|
|
|
- CustomFieldModelBulkEditForm
|
|
|
|
|
|
|
+ form_from_model(InventoryItem, ['label', 'role', 'manufacturer', 'part_id', 'description']),
|
|
|
|
|
+ NetBoxModelBulkEditForm
|
|
|
):
|
|
):
|
|
|
- pk = forms.ModelMultipleChoiceField(
|
|
|
|
|
- queryset=InventoryItem.objects.all(),
|
|
|
|
|
- widget=forms.MultipleHiddenInput()
|
|
|
|
|
|
|
+ role = DynamicModelChoiceField(
|
|
|
|
|
+ queryset=InventoryItemRole.objects.all(),
|
|
|
|
|
+ required=False
|
|
|
)
|
|
)
|
|
|
manufacturer = DynamicModelChoiceField(
|
|
manufacturer = DynamicModelChoiceField(
|
|
|
queryset=Manufacturer.objects.all(),
|
|
queryset=Manufacturer.objects.all(),
|
|
|
required=False
|
|
required=False
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
- class Meta:
|
|
|
|
|
- nullable_fields = ['label', 'manufacturer', 'part_id', 'description']
|
|
|
|
|
|
|
+ model = InventoryItem
|
|
|
|
|
+ fieldsets = (
|
|
|
|
|
+ (None, ('label', 'role', 'manufacturer', 'part_id', 'description')),
|
|
|
|
|
+ )
|
|
|
|
|
+ nullable_fields = ('label', 'role', 'manufacturer', 'part_id', 'description')
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+#
|
|
|
|
|
+# Device component roles
|
|
|
|
|
+#
|
|
|
|
|
+
|
|
|
|
|
+class InventoryItemRoleBulkEditForm(NetBoxModelBulkEditForm):
|
|
|
|
|
+ color = ColorField(
|
|
|
|
|
+ required=False
|
|
|
|
|
+ )
|
|
|
|
|
+ description = forms.CharField(
|
|
|
|
|
+ max_length=200,
|
|
|
|
|
+ required=False
|
|
|
|
|
+ )
|
|
|
|
|
+
|
|
|
|
|
+ model = InventoryItemRole
|
|
|
|
|
+ fieldsets = (
|
|
|
|
|
+ (None, ('color', 'description')),
|
|
|
|
|
+ )
|
|
|
|
|
+ nullable_fields = ('color', 'description')
|