diff --git a/netbox/dcim/forms/common.py b/netbox/dcim/forms/common.py index d479916d9..39459941c 100644 --- a/netbox/dcim/forms/common.py +++ b/netbox/dcim/forms/common.py @@ -54,13 +54,17 @@ class InterfaceCommonForm(forms.Form): class ModuleCommonForm(forms.Form): def clean(self): - super().clean() + cleaned_data = super().clean() - 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') + # Skip form validation if field validation already found errors. + if self.errors: + return cleaned_data + + replicate_components = cleaned_data.get("replicate_components") + adopt_components = cleaned_data.get("adopt_components") + device = cleaned_data.get('device') + module_type = cleaned_data.get('module_type') + module_bay = cleaned_data.get('module_bay') if adopt_components: self.instance._adopt_components = True 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})." )