class RearPortBulkCreateForm( form_from_model(RearPort, ['type', 'color', 'positions', 'mark_connected']), DeviceBulkAddComponentForm): model = RearPort field_order = ('name_pattern', 'label_pattern', 'type', 'positions', 'mark_connected', 'description', 'tags')
class PowerOutletBulkEditForm( form_from_model(PowerOutlet, [ 'label', 'type', 'feed_leg', 'power_port', 'mark_connected', 'description' ]), AddRemoveTagsForm, CustomFieldModelBulkEditForm): 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(required=False, widget=BulkEditNullBooleanSelect) class Meta: nullable_fields = [ 'label', 'type', 'feed_leg', 'power_port', 'description' ] def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) # Limit power_port queryset to PowerPorts which belong to the parent Device if 'device' in self.initial: device = Device.objects.filter(pk=self.initial['device']).first() self.fields['power_port'].queryset = PowerPort.objects.filter( device=device) else: self.fields['power_port'].choices = () self.fields['power_port'].widget.attrs['disabled'] = True
class ConsoleServerPortBulkCreateForm( form_from_model(ConsoleServerPort, ['type', 'speed', 'mark_connected']), DeviceBulkAddComponentForm): model = ConsoleServerPort field_order = ('name_pattern', 'label_pattern', 'type', 'speed', 'description', 'tags')
class DeviceBayBulkEditForm( form_from_model(DeviceBay, ['label', 'description']), AddRemoveTagsForm, CustomFieldModelBulkEditForm): pk = forms.ModelMultipleChoiceField(queryset=DeviceBay.objects.all(), widget=forms.MultipleHiddenInput()) class Meta: nullable_fields = ['label', 'description']
class InterfaceBulkCreateForm( form_from_model(Interface, ['type', 'enabled', 'mtu', 'mgmt_only', 'mark_connected']), DeviceBulkAddComponentForm ): model = Interface field_order = ( 'name_pattern', 'label_pattern', 'type', 'enabled', 'mtu', 'mgmt_only', 'mark_connected', 'description', 'tags', )
class PowerPortBulkCreateForm( form_from_model( PowerPort, ['type', 'maximum_draw', 'allocated_draw', 'mark_connected']), DeviceBulkAddComponentForm): model = PowerPort field_order = ('name_pattern', 'label_pattern', 'type', 'maximum_draw', 'allocated_draw', 'description', 'tags')
class InventoryItemBulkCreateForm( form_from_model(InventoryItem, ['manufacturer', 'part_id', 'serial', 'asset_tag', 'discovered']), DeviceBulkAddComponentForm ): model = InventoryItem field_order = ( 'name_pattern', 'label_pattern', 'manufacturer', 'part_id', 'serial', 'asset_tag', 'discovered', 'description', 'tags', )
class InterfaceBulkCreateForm( form_from_model(Interface, ['enabled', 'mtu', 'description', 'tags']), VirtualMachineBulkAddComponentForm ): type = forms.ChoiceField( choices=VMInterfaceTypeChoices, initial=VMInterfaceTypeChoices.TYPE_VIRTUAL, widget=forms.HiddenInput() )
class RearPortBulkEditForm( form_from_model( RearPort, ['label', 'type', 'color', 'mark_connected', 'description']), AddRemoveTagsForm, CustomFieldModelBulkEditForm): pk = forms.ModelMultipleChoiceField(queryset=RearPort.objects.all(), widget=forms.MultipleHiddenInput()) class Meta: nullable_fields = ['label', 'description']
class InventoryItemBulkEditForm( form_from_model(InventoryItem, ['label', 'manufacturer', 'part_id', 'description']), AddRemoveTagsForm, CustomFieldModelBulkEditForm): pk = forms.ModelMultipleChoiceField(queryset=InventoryItem.objects.all(), widget=forms.MultipleHiddenInput()) manufacturer = DynamicModelChoiceField(queryset=Manufacturer.objects.all(), required=False) class Meta: nullable_fields = ['label', 'manufacturer', 'part_id', 'description']
class PowerPortBulkEditForm( form_from_model(PowerPort, [ 'label', 'type', 'maximum_draw', 'allocated_draw', 'mark_connected', 'description' ]), AddRemoveTagsForm, CustomFieldModelBulkEditForm): pk = forms.ModelMultipleChoiceField(queryset=PowerPort.objects.all(), widget=forms.MultipleHiddenInput()) mark_connected = forms.NullBooleanField(required=False, widget=BulkEditNullBooleanSelect) class Meta: nullable_fields = ['label', 'description']
class ConsolePortBulkEditForm( form_from_model( ConsolePort, ['label', 'type', 'speed', 'mark_connected', 'description']), BootstrapMixin, AddRemoveTagsForm, CustomFieldModelBulkEditForm): pk = forms.ModelMultipleChoiceField(queryset=ConsolePort.objects.all(), widget=forms.MultipleHiddenInput()) mark_connected = forms.NullBooleanField(required=False, widget=BulkEditNullBooleanSelect) class Meta: nullable_fields = ['label', 'description']
class InterfaceBulkEditForm( 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', ]), AddRemoveTagsForm, CustomFieldModelBulkEditForm): 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(required=False, widget=BulkEditNullBooleanSelect) parent = DynamicModelChoiceField(queryset=Interface.objects.all(), required=False) bridge = DynamicModelChoiceField(queryset=Interface.objects.all(), required=False) lag = DynamicModelChoiceField(queryset=Interface.objects.all(), required=False, query_params={ 'type': 'lag', }) mgmt_only = forms.NullBooleanField(required=False, widget=BulkEditNullBooleanSelect, label='Management only') mark_connected = forms.NullBooleanField(required=False, widget=BulkEditNullBooleanSelect) untagged_vlan = DynamicModelChoiceField(queryset=VLAN.objects.all(), required=False) tagged_vlans = DynamicModelMultipleChoiceField(queryset=VLAN.objects.all(), required=False) 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', ] def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) if 'device' in self.initial: device = Device.objects.filter(pk=self.initial['device']).first() # Restrict parent/bridge/LAG interface assignment by device self.fields['parent'].widget.add_query_param( 'device_id', device.pk) self.fields['bridge'].widget.add_query_param( 'device_id', device.pk) self.fields['lag'].widget.add_query_param('device_id', device.pk) # Limit VLAN choices by device self.fields['untagged_vlan'].widget.add_query_param( 'available_on_device', device.pk) self.fields['tagged_vlans'].widget.add_query_param( 'available_on_device', device.pk) else: # See #4523 if 'pk' in self.initial: site = None interfaces = Interface.objects.filter( pk__in=self.initial['pk']).prefetch_related('device__site') # Check interface sites. First interface should set site, further interfaces will either continue the # loop or reset back to no site and break the loop. for interface in interfaces: if site is None: site = interface.device.site elif interface.device.site is not site: site = None break if site is not None: self.fields['untagged_vlan'].widget.add_query_param( 'site_id', site.pk) self.fields['tagged_vlans'].widget.add_query_param( 'site_id', site.pk) self.fields['parent'].choices = () self.fields['parent'].widget.attrs['disabled'] = True self.fields['bridge'].choices = () self.fields['bridge'].widget.attrs['disabled'] = True self.fields['lag'].choices = () self.fields['lag'].widget.attrs['disabled'] = True def clean(self): super().clean() # Untagged interfaces cannot be assigned tagged VLANs if self.cleaned_data[ 'mode'] == InterfaceModeChoices.MODE_ACCESS and self.cleaned_data[ 'tagged_vlans']: raise forms.ValidationError({ 'mode': "An access interface cannot have tagged VLANs assigned." }) # Remove all tagged VLAN assignments from "tagged all" interfaces elif self.cleaned_data['mode'] == InterfaceModeChoices.MODE_TAGGED_ALL: self.cleaned_data['tagged_vlans'] = []
class PowerOutletBulkCreateForm( form_from_model(PowerOutlet, ['type', 'feed_leg', 'mark_connected']), DeviceBulkAddComponentForm ): model = PowerOutlet field_order = ('name_pattern', 'label_pattern', 'type', 'feed_leg', 'description', 'tags')
class VMInterfaceBulkCreateForm( form_from_model(VMInterface, ['enabled', 'mtu', 'description', 'tags']), VirtualMachineBulkAddComponentForm): pass