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

Merge pull request #19301 from renatoalmeidaoliveira/19229-cant-unset-a-device-interface-vlan-mode-without-an-error

Fixes: #19229 Validade interface mode changes
bctiemann 9 месяцев назад
Родитель
Сommit
f652dc7bda
1 измененных файлов с 6 добавлено и 1 удалено
  1. 6 1
      netbox/dcim/forms/common.py

+ 6 - 1
netbox/dcim/forms/common.py

@@ -41,7 +41,6 @@ class InterfaceCommonForm(forms.Form):
 
 
     def clean(self):
     def clean(self):
         super().clean()
         super().clean()
-
         parent_field = 'device' if 'device' in self.cleaned_data else 'virtual_machine'
         parent_field = 'device' if 'device' in self.cleaned_data else 'virtual_machine'
         if 'tagged_vlans' in self.fields.keys():
         if 'tagged_vlans' in self.fields.keys():
             tagged_vlans = self.cleaned_data.get('tagged_vlans') if self.is_bound else \
             tagged_vlans = self.cleaned_data.get('tagged_vlans') if self.is_bound else \
@@ -61,6 +60,12 @@ class InterfaceCommonForm(forms.Form):
                         "or they must be global"
                         "or they must be global"
                     ).format(vlans=', '.join(invalid_vlans))
                     ).format(vlans=', '.join(invalid_vlans))
                 })
                 })
+        # Validate mode change
+        if self.instance.pk and (self.instance.mode != self.cleaned_data['mode']):
+            if 'untagged_vlan' not in self.cleaned_data and self.instance.untagged_vlan is not None:
+                self.instance.untagged_vlan = None
+            if 'tagged_vlans' not in self.cleaned_data and self.instance.tagged_vlans is not None:
+                self.instance.tagged_vlans.clear()
 
 
 
 
 class ModuleCommonForm(forms.Form):
 class ModuleCommonForm(forms.Form):