diff --git a/docs/release-notes/version-2.8.md b/docs/release-notes/version-2.8.md index 33da13bcb..22fec3544 100644 --- a/docs/release-notes/version-2.8.md +++ b/docs/release-notes/version-2.8.md @@ -18,6 +18,7 @@ * [#4737](https://github.com/netbox-community/netbox/issues/4737) - Fix display of role labels in virtual machines table * [#4743](https://github.com/netbox-community/netbox/issues/4743) - Allow users to create "next available" IPs without needing permission to create prefixes * [#4756](https://github.com/netbox-community/netbox/issues/4756) - Filter parent group by site when creating rack groups +* [#4760](https://github.com/netbox-community/netbox/issues/4760) - Enable power port template assignment when bulk editing power outlet templates --- diff --git a/netbox/dcim/forms.py b/netbox/dcim/forms.py index 301b0c6af..c779f7f98 100644 --- a/netbox/dcim/forms.py +++ b/netbox/dcim/forms.py @@ -1226,11 +1226,21 @@ class PowerOutletTemplateBulkEditForm(BootstrapMixin, BulkEditForm): queryset=PowerOutletTemplate.objects.all(), widget=forms.MultipleHiddenInput() ) + device_type = forms.ModelChoiceField( + queryset=DeviceType.objects.all(), + required=False, + disabled=True, + widget=forms.HiddenInput() + ) type = forms.ChoiceField( choices=add_blank_choice(PowerOutletTypeChoices), required=False, widget=StaticSelect2() ) + power_port = forms.ModelChoiceField( + queryset=PowerPortTemplate.objects.all(), + required=False + ) feed_leg = forms.ChoiceField( choices=add_blank_choice(PowerOutletFeedLegChoices), required=False, @@ -1238,7 +1248,18 @@ class PowerOutletTemplateBulkEditForm(BootstrapMixin, BulkEditForm): ) class Meta: - nullable_fields = ('type', 'feed_leg') + nullable_fields = ('type', 'power_port', 'feed_leg') + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + # Limit power_port queryset to PowerPortTemplates which belong to the parent DeviceType + if 'device_type' in self.initial: + device_type = DeviceType.objects.filter(pk=self.initial['device_type']).first() + self.fields['power_port'].queryset = PowerPortTemplate.objects.filter(device_type=device_type) + else: + self.fields['power_port'].choices = () + self.fields['power_port'].widget.attrs['disabled'] = True class InterfaceTemplateForm(BootstrapMixin, forms.ModelForm): diff --git a/netbox/templates/dcim/inc/devicetype_component_table.html b/netbox/templates/dcim/inc/devicetype_component_table.html index a83059980..010749b93 100644 --- a/netbox/templates/dcim/inc/devicetype_component_table.html +++ b/netbox/templates/dcim/inc/devicetype_component_table.html @@ -9,12 +9,12 @@