diff --git a/netbox/dcim/api/serializers_/device_components.py b/netbox/dcim/api/serializers_/device_components.py index 16b68671b..468c7b496 100644 --- a/netbox/dcim/api/serializers_/device_components.py +++ b/netbox/dcim/api/serializers_/device_components.py @@ -243,22 +243,22 @@ class InterfaceSerializer(NetBoxModelSerializer, CabledObjectSerializer, Connect mode = None tagged_vlans = [] - if self.instance.pk and 'mode' in data.keys(): - mode = data.get('mode') if 'mode' in data.keys() else self.instance.get('mode') - elif 'mode' in data.keys(): - mode = data.get('mode') - - if self.instance.pk and 'tagged_vlans' in data.keys(): - tagged_vlans = data.get('tagged_vlans') if 'tagged_vlans' in data.keys() else \ - self.instance.tagged_vlans.all() - 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 self.instance: + if 'mode' in data.keys(): + mode = data.get('mode') if 'mode' in data.keys() else self.instance.get('mode') + if 'tagged_vlans' in data.keys(): + tagged_vlans = data.get('tagged_vlans') if 'tagged_vlans' in data.keys() else \ + self.instance.tagged_vlans.all() + if 'untagged_vlan' in data.keys(): + untagged_vlan = data.get('untagged_vlan') if 'untagged_vlan' in data.keys() else \ + self.instance.untagged_vlan + else: + if 'mode' in data.keys(): + mode = data.get('mode') + if 'tagged_vlans' in data.keys(): + tagged_vlans = data.get('tagged_vlans') + if 'untagged_vlan' in data.keys(): + untagged_vlan = data.get('untagged_vlan') if mode != InterfaceModeChoices.MODE_TAGGED and tagged_vlans: raise serializers.ValidationError({ diff --git a/netbox/dcim/forms/model_forms.py b/netbox/dcim/forms/model_forms.py index b26247a94..95908bd41 100644 --- a/netbox/dcim/forms/model_forms.py +++ b/netbox/dcim/forms/model_forms.py @@ -1368,22 +1368,23 @@ class InterfaceForm(InterfaceCommonForm, ModularDeviceComponentForm): 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') - elif 'mode' in self.cleaned_data.keys(): - mode = self.cleaned_data.get('mode') - - if self.instance.pk and 'tagged_vlans' in self.cleaned_data.keys(): - tagged_vlans = self.cleaned_data.get('tagged_vlans') if 'tagged_vlans' in self.cleaned_data.keys() else\ - self.instance.tagged_vlans.all() - 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 self.instance: + if 'mode' in self.cleaned_data.keys(): + mode = self.cleaned_data.get('mode') if 'mode' in self.cleaned_data.keys() else\ + self.instance.get('mode') + if 'tagged_vlans' in self.cleaned_data.keys(): + tagged_vlans = self.cleaned_data.get('tagged_vlans') if 'tagged_vlans' in self.cleaned_data.keys() else\ + self.instance.tagged_vlans.all() + if '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 + else: + if 'mode' in self.cleaned_data.keys(): + mode = self.cleaned_data.get('mode') + if 'tagged_vlans' in self.cleaned_data.keys(): + tagged_vlans = self.cleaned_data.get('tagged_vlans') + if '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({