Optimize untagged vlan check

This commit is contained in:
Daniel Sheppard 2024-08-27 00:21:38 -05:00
parent d159547758
commit 9a13caae7a
3 changed files with 17 additions and 4 deletions

View File

@ -244,7 +244,7 @@ class InterfaceSerializer(NetBoxModelSerializer, CabledObjectSerializer, Connect
tagged_vlans = []
if self.instance.pk and 'mode' in data.keys():
mode = data.get('mode') if 'mode' in self.data.keys() else self.instance.get('mode')
mode = data.get('mode') if 'mode' in data.keys() else self.instance.get('mode')
elif 'mode' in data.keys():
mode = data.get('mode')
@ -254,9 +254,15 @@ class InterfaceSerializer(NetBoxModelSerializer, CabledObjectSerializer, Connect
elif 'tagged_vlans' in data.keys():
tagged_vlans = data.get('tagged_vlans')
if self.instance.pk and 'untagged_vlan' in data.keys():
untagged_vlan = data.get('untagged_vlan') if 'untagged_vlan' in data.keys() else \
self.instance.untagged_vlan
elif 'untagged_vlan' in data.keys():
untagged_vlan = data.get('untagged_vlan')
if mode != InterfaceModeChoices.MODE_TAGGED and tagged_vlans:
raise serializers.ValidationError({
'tagged_vlans': "Interface mode does not support including tagged vlans"
'tagged_vlans': _("Interface mode does not support including tagged vlans")
})
# Validate many-to-many VLAN assignments

View File

@ -1366,6 +1366,7 @@ class InterfaceForm(InterfaceCommonForm, ModularDeviceComponentForm):
def clean(self):
mode = None
tagged_vlans = []
untagged_vlan = None
if self.instance.pk and 'mode' in self.cleaned_data.keys():
mode = self.cleaned_data.get('mode') if 'mode' in self.cleaned_data.keys() else self.instance.get('mode')
@ -1378,9 +1379,15 @@ class InterfaceForm(InterfaceCommonForm, ModularDeviceComponentForm):
elif 'tagged_vlans' in self.cleaned_data.keys():
tagged_vlans = self.cleaned_data.get('tagged_vlans')
if self.instance.pk and 'untagged_vlan' in self.cleaned_data.keys():
untagged_vlan = self.cleaned_data.get('untagged_vlan') if 'untagged_vlan' in self.cleaned_data.keys() else\
self.instance.untagged_vlan
elif 'untagged_vlan' in self.cleaned_data.keys():
untagged_vlan = self.cleaned_data.get('untagged_vlan')
if mode != InterfaceModeChoices.MODE_TAGGED and tagged_vlans:
raise forms.ValidationError({
'tagged_vlans': "Interface mode does not support including tagged vlans"
'tagged_vlans': _("Interface mode does not support including tagged vlans")
})

View File

@ -894,7 +894,7 @@ class Interface(ModularComponentModel, BaseInterface, CabledObjectModel, PathEnd
raise ValidationError({'rf_channel_width': _("Cannot specify custom width with channel selected.")})
# VLAN validation
if self.mode is None and self.untagged_vlan:
if not self.mode and self.untagged_vlan:
raise ValidationError({'untagged_vlan': _("Interface mode does not support including an untagged vlan.")})
# Validate untagged VLAN