diff --git a/netbox/dcim/forms.py b/netbox/dcim/forms.py index 6aef5808c..390911f7f 100644 --- a/netbox/dcim/forms.py +++ b/netbox/dcim/forms.py @@ -1594,9 +1594,10 @@ class InterfaceConnectionForm(BootstrapMixin, ChainedFieldsMixin, forms.ModelFor ] # Mark connected interfaces as disabled - self.fields['interface_b'].choices = [ - (iface.id, {'label': iface.name, 'disabled': iface.is_connected}) for iface in self.fields['interface_b'].queryset - ] + if self.data.get('device_b'): + self.fields['interface_b'].choices = [ + (iface.id, {'label': iface.name, 'disabled': iface.is_connected}) for iface in self.fields['interface_b'].queryset + ] class InterfaceConnectionCSVForm(forms.ModelForm): diff --git a/netbox/project-static/js/livesearch.js b/netbox/project-static/js/livesearch.js index f387372b4..846d2d853 100644 --- a/netbox/project-static/js/livesearch.js +++ b/netbox/project-static/js/livesearch.js @@ -43,8 +43,9 @@ $(document).ready(function() { real_field.empty(); real_field.append($("").attr('value', ui.item.value).text(ui.item.label)); real_field.change(); - // If the field has a parent helper, reset the parent to no selection + // Disable parent selection fields $('select[filter-for="' + real_field.attr('name') + '"]').val(''); + $('#select select').attr('disabled', 'disabled'); }, minLength: 4, delay: 500 diff --git a/netbox/utilities/forms.py b/netbox/utilities/forms.py index dff06d393..1f37efa08 100644 --- a/netbox/utilities/forms.py +++ b/netbox/utilities/forms.py @@ -472,6 +472,9 @@ class ChainedFieldsMixin(forms.BaseForm): def __init__(self, *args, **kwargs): super(ChainedFieldsMixin, self).__init__(*args, **kwargs) + # if self.is_bound: + # assert False, self.data + for field_name, field in self.fields.items(): if isinstance(field, ChainedModelChoiceField):