From 949c9f3d5e32ffb2b5ed6bb5156e3585f4cd1fd4 Mon Sep 17 00:00:00 2001 From: Arthur Date: Wed, 8 May 2024 14:36:40 -0700 Subject: [PATCH 1/2] 15973 fix switch type on cable edit --- netbox/dcim/forms/connections.py | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/netbox/dcim/forms/connections.py b/netbox/dcim/forms/connections.py index b57f4ad2cd5..4eccb42e0e9 100644 --- a/netbox/dcim/forms/connections.py +++ b/netbox/dcim/forms/connections.py @@ -90,14 +90,15 @@ def __new__(mcs, name, bases, attrs): class _CableForm(CableForm, metaclass=FormMetaclass): def __init__(self, *args, initial=None, **kwargs): - initial = initial or {} if a_type: - ct = ContentType.objects.get_for_model(a_type) - initial['a_terminations_type'] = f'{ct.app_label}.{ct.model}' + a_ct = ContentType.objects.get_for_model(a_type) + initial['a_terminations_type'] = f'{a_ct.app_label}.{a_ct.model}' + initial.pop('a_terminations', None) if b_type: - ct = ContentType.objects.get_for_model(b_type) - initial['b_terminations_type'] = f'{ct.app_label}.{ct.model}' + b_ct = ContentType.objects.get_for_model(b_type) + initial['b_terminations_type'] = f'{b_ct.app_label}.{b_ct.model}' + initial.pop('b_terminations', None) # TODO: Temporary hack to work around list handling limitations with utils.normalize_querydict() for field_name in ('a_terminations', 'b_terminations'): @@ -108,8 +109,10 @@ def __init__(self, *args, initial=None, **kwargs): if self.instance and self.instance.pk: # Initialize A/B terminations when modifying an existing Cable instance - self.initial['a_terminations'] = self.instance.a_terminations - self.initial['b_terminations'] = self.instance.b_terminations + if a_type and self.instance.a_terminations and a_ct == ContentType.objects.get_for_model(self.instance.a_terminations[0]): + self.initial['a_terminations'] = self.instance.a_terminations + if b_type and self.instance.b_terminations and b_ct == ContentType.objects.get_for_model(self.instance.b_terminations[0]): + self.initial['b_terminations'] = self.instance.b_terminations def clean(self): super().clean() From 07288e4b6130b74ba37d73b261c20780819881fd Mon Sep 17 00:00:00 2001 From: Arthur Date: Wed, 8 May 2024 15:14:54 -0700 Subject: [PATCH 2/2] 15973 fix cable add from device --- netbox/dcim/forms/connections.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/netbox/dcim/forms/connections.py b/netbox/dcim/forms/connections.py index 4eccb42e0e9..44bea047ac9 100644 --- a/netbox/dcim/forms/connections.py +++ b/netbox/dcim/forms/connections.py @@ -91,14 +91,13 @@ class _CableForm(CableForm, metaclass=FormMetaclass): def __init__(self, *args, initial=None, **kwargs): initial = initial or {} + if a_type: a_ct = ContentType.objects.get_for_model(a_type) initial['a_terminations_type'] = f'{a_ct.app_label}.{a_ct.model}' - initial.pop('a_terminations', None) if b_type: b_ct = ContentType.objects.get_for_model(b_type) initial['b_terminations_type'] = f'{b_ct.app_label}.{b_ct.model}' - initial.pop('b_terminations', None) # TODO: Temporary hack to work around list handling limitations with utils.normalize_querydict() for field_name in ('a_terminations', 'b_terminations'): @@ -113,6 +112,13 @@ def __init__(self, *args, initial=None, **kwargs): self.initial['a_terminations'] = self.instance.a_terminations if b_type and self.instance.b_terminations and b_ct == ContentType.objects.get_for_model(self.instance.b_terminations[0]): self.initial['b_terminations'] = self.instance.b_terminations + else: + # Need to clear terminations if swapped type - but need to do it only + # if not from instance + if a_type: + initial.pop('a_terminations', None) + if b_type: + initial.pop('b_terminations', None) def clean(self): super().clean()