From 462f992a2b62265af90b3a576c5b6d951c1690b7 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Thu, 18 Jun 2020 12:09:28 -0400 Subject: [PATCH] Introduce ComponentCreateForm to standardize forms for device component creation --- netbox/dcim/forms.py | 78 ++++++++++++-------------------------------- 1 file changed, 21 insertions(+), 57 deletions(-) diff --git a/netbox/dcim/forms.py b/netbox/dcim/forms.py index f3beccc12..9d9d18baf 100644 --- a/netbox/dcim/forms.py +++ b/netbox/dcim/forms.py @@ -2185,9 +2185,21 @@ class DeviceFilterForm(BootstrapMixin, LocalConfigContextFilterForm, TenancyFilt # -# Bulk device component creation +# Device components # +class ComponentCreateForm(BootstrapMixin, forms.Form): + """ + Base form for the creation of device components. + """ + device = DynamicModelChoiceField( + queryset=Device.objects.all() + ) + name_pattern = ExpandableNameField( + label='Name' + ) + + class DeviceBulkAddComponentForm(BootstrapMixin, forms.Form): pk = forms.ModelMultipleChoiceField( queryset=Device.objects.all(), @@ -2233,13 +2245,7 @@ class ConsolePortForm(BootstrapMixin, forms.ModelForm): } -class ConsolePortCreateForm(BootstrapMixin, forms.Form): - device = DynamicModelChoiceField( - queryset=Device.objects.prefetch_related('device_type__manufacturer') - ) - name_pattern = ExpandableNameField( - label='Name' - ) +class ConsolePortCreateForm(ComponentCreateForm): type = forms.ChoiceField( choices=add_blank_choice(ConsolePortTypeChoices), required=False, @@ -2319,13 +2325,7 @@ class ConsoleServerPortForm(BootstrapMixin, forms.ModelForm): } -class ConsoleServerPortCreateForm(BootstrapMixin, forms.Form): - device = DynamicModelChoiceField( - queryset=Device.objects.prefetch_related('device_type__manufacturer') - ) - name_pattern = ExpandableNameField( - label='Name' - ) +class ConsoleServerPortCreateForm(ComponentCreateForm): type = forms.ChoiceField( choices=add_blank_choice(ConsolePortTypeChoices), required=False, @@ -2419,13 +2419,7 @@ class PowerPortForm(BootstrapMixin, forms.ModelForm): } -class PowerPortCreateForm(BootstrapMixin, forms.Form): - device = DynamicModelChoiceField( - queryset=Device.objects.prefetch_related('device_type__manufacturer') - ) - name_pattern = ExpandableNameField( - label='Name' - ) +class PowerPortCreateForm(ComponentCreateForm): type = forms.ChoiceField( choices=add_blank_choice(PowerPortTypeChoices), required=False, @@ -2528,13 +2522,7 @@ class PowerOutletForm(BootstrapMixin, forms.ModelForm): ) -class PowerOutletCreateForm(BootstrapMixin, forms.Form): - device = DynamicModelChoiceField( - queryset=Device.objects.prefetch_related('device_type__manufacturer') - ) - name_pattern = ExpandableNameField( - label='Name' - ) +class PowerOutletCreateForm(ComponentCreateForm): type = forms.ChoiceField( choices=add_blank_choice(PowerOutletTypeChoices), required=False, @@ -2753,13 +2741,7 @@ class InterfaceForm(InterfaceCommonForm, BootstrapMixin, forms.ModelForm): self.fields['tagged_vlans'].widget.add_additional_query_param('site_id', device.site.pk) -class InterfaceCreateForm(BootstrapMixin, InterfaceCommonForm, forms.Form): - device = DynamicModelChoiceField( - queryset=Device.objects.prefetch_related('device_type__manufacturer') - ) - name_pattern = ExpandableNameField( - label='Name' - ) +class InterfaceCreateForm(ComponentCreateForm, InterfaceCommonForm): type = forms.ChoiceField( choices=InterfaceTypeChoices, widget=StaticSelect2(), @@ -3036,13 +3018,7 @@ class FrontPortForm(BootstrapMixin, forms.ModelForm): # TODO: Merge with FrontPortTemplateCreateForm to remove duplicate logic -class FrontPortCreateForm(BootstrapMixin, forms.Form): - device = DynamicModelChoiceField( - queryset=Device.objects.prefetch_related('device_type__manufacturer') - ) - name_pattern = ExpandableNameField( - label='Name' - ) +class FrontPortCreateForm(ComponentCreateForm): type = forms.ChoiceField( choices=PortTypeChoices, widget=StaticSelect2(), @@ -3216,13 +3192,7 @@ class RearPortForm(BootstrapMixin, forms.ModelForm): } -class RearPortCreateForm(BootstrapMixin, forms.Form): - device = DynamicModelChoiceField( - queryset=Device.objects.prefetch_related('device_type__manufacturer') - ) - name_pattern = ExpandableNameField( - label='Name' - ) +class RearPortCreateForm(ComponentCreateForm): type = forms.ChoiceField( choices=PortTypeChoices, widget=StaticSelect2(), @@ -3318,13 +3288,7 @@ class DeviceBayForm(BootstrapMixin, forms.ModelForm): } -class DeviceBayCreateForm(BootstrapMixin, forms.Form): - device = DynamicModelChoiceField( - queryset=Device.objects.prefetch_related('device_type__manufacturer') - ) - name_pattern = ExpandableNameField( - label='Name' - ) +class DeviceBayCreateForm(ComponentCreateForm): tags = TagField( required=False )