diff --git a/netbox/dcim/forms/object_create.py b/netbox/dcim/forms/object_create.py index abd7bd6f6..8e59dd5a5 100644 --- a/netbox/dcim/forms/object_create.py +++ b/netbox/dcim/forms/object_create.py @@ -68,6 +68,15 @@ class ComponentCreateForm(forms.Form): ).format(value_count=value_count, pattern_count=pattern_count) }, code='label_pattern_mismatch') + if hasattr(self, 'get_iterative_data'): + object_name, iterative_limit = self.get_iterative_item_limit() + if pattern_count > iterative_limit: + raise forms.ValidationError({ + field_name: _( + "The provided pattern specifies {pattern_count} values but there are not enough {object_name} selected to assign to." + ).format(pattern_count=pattern_count, object_name=object_name) + }, code='label_pattern_mismatch') + # # Device component templates @@ -161,6 +170,9 @@ class FrontPortTemplateCreateForm(ComponentCreateForm, model_forms.FrontPortTemp 'rear_port_position': int(position), } + def get_iterative_item_limit(self): + return _('rear ports'), len(self.cleaned_data['rear_port']) + class RearPortTemplateCreateForm(ComponentCreateForm, model_forms.RearPortTemplateForm): @@ -301,6 +313,9 @@ class FrontPortCreateForm(ComponentCreateForm, model_forms.FrontPortForm): 'rear_port_position': int(position), } + def get_iterative_item_limit(self): + return _('rear ports'), len(self.cleaned_data['rear_port']) + class RearPortCreateForm(ComponentCreateForm, model_forms.RearPortForm):