Просмотр исходного кода

Fixes #11345 - Fix module validation (#11346)

* Make sure we bail out if field validation failed when importing modules

* Tweak form validation logic

Co-authored-by: jeremystretch <jstretch@ns1.com>
kkthxbye 3 лет назад
Родитель
Сommit
e1169e7ea6
2 измененных файлов с 6 добавлено и 5 удалено
  1. 5 4
      netbox/dcim/forms/common.py
  2. 1 1
      netbox/dcim/models/devices.py

+ 5 - 4
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
 

+ 1 - 1
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})."
             )