diff --git a/netbox/dcim/forms/common.py b/netbox/dcim/forms/common.py index d479916d9..a2243ce2d 100644 --- a/netbox/dcim/forms/common.py +++ b/netbox/dcim/forms/common.py @@ -56,8 +56,8 @@ class ModuleCommonForm(forms.Form): def clean(self): super().clean() - replicate_components = self.cleaned_data.get("replicate_components") - adopt_components = self.cleaned_data.get("adopt_components") + replicate_components = self.cleaned_data.get('replicate_components') + adopt_components = self.cleaned_data.get('adopt_components') device = self.cleaned_data.get('device') module_type = self.cleaned_data.get('module_type') module_bay = self.cleaned_data.get('module_bay') @@ -65,8 +65,9 @@ class ModuleCommonForm(forms.Form): if adopt_components: self.instance._adopt_components = True - # Bail out if we are not installing a new module or if we are not replicating components - if self.instance.pk or not replicate_components: + # Bail out if we are not installing a new module or if we are not replicating components (or if + # validation has already failed) + if self.errors or self.instance.pk or not replicate_components: self.instance._disable_replication = True return diff --git a/netbox/dcim/models/devices.py b/netbox/dcim/models/devices.py index 53c6d12a7..603129228 100644 --- a/netbox/dcim/models/devices.py +++ b/netbox/dcim/models/devices.py @@ -961,7 +961,7 @@ class Module(PrimaryModel, ConfigContextModel): def clean(self): super().clean() - if self.module_bay.device != self.device: + if hasattr(self, "module_bay") and (self.module_bay.device != self.device): raise ValidationError( f"Module must be installed within a module bay belonging to the assigned device ({self.device})." )