diff --git a/docs/data-model/extras.md b/docs/data-model/extras.md index a3fd23aad..f4654c0dd 100644 --- a/docs/data-model/extras.md +++ b/docs/data-model/extras.md @@ -119,7 +119,7 @@ Each line of the **device patterns** field represents a hierarchical layer withi ``` core-switch-[abcd] dist-switch\d -access-switch\d+,oob-switch\d+ +access-switch\d+;oob-switch\d+ ``` Note that you can combine multiple regexes onto one line using semicolons. The order in which regexes are listed on a line is significant: devices matching the first regex will be rendered first, and subsequent groups will be rendered to the right of those. diff --git a/netbox/circuits/forms.py b/netbox/circuits/forms.py index 89f7a598f..f2371b262 100644 --- a/netbox/circuits/forms.py +++ b/netbox/circuits/forms.py @@ -252,6 +252,11 @@ class CircuitTerminationForm(BootstrapMixin, ChainedFieldsMixin, forms.ModelForm super(CircuitTerminationForm, self).__init__(*args, **kwargs) # Mark connected interfaces as disabled - self.fields['interface'].choices = [ - (iface.id, {'label': iface.name, 'disabled': iface.is_connected}) for iface in self.fields['interface'].queryset - ] + self.fields['interface'].choices = [] + for iface in self.fields['interface'].queryset: + self.fields['interface'].choices.append( + (iface.id, { + 'label': iface.name, + 'disabled': iface.is_connected and iface.pk != self.initial.get('interface'), + }) + ) diff --git a/netbox/netbox/settings.py b/netbox/netbox/settings.py index f869ce236..539f68015 100644 --- a/netbox/netbox/settings.py +++ b/netbox/netbox/settings.py @@ -13,7 +13,7 @@ except ImportError: ) -VERSION = '2.0.8' +VERSION = '2.0.9' # Import required configuration parameters ALLOWED_HOSTS = DATABASE = SECRET_KEY = None diff --git a/netbox/utilities/forms.py b/netbox/utilities/forms.py index 723b32513..bb42b7315 100644 --- a/netbox/utilities/forms.py +++ b/netbox/utilities/forms.py @@ -489,7 +489,7 @@ class ChainedFieldsMixin(forms.BaseForm): if filters_dict: field.queryset = field.queryset.filter(**filters_dict) - elif not self.is_bound and self.instance and hasattr(self.instance, field_name): + elif not self.is_bound and getattr(self, 'instance', None) and hasattr(self.instance, field_name): obj = getattr(self.instance, field_name) if obj is not None: field.queryset = field.queryset.filter(pk=obj.pk)