diff --git a/netbox/dcim/forms/bulk_import.py b/netbox/dcim/forms/bulk_import.py index 1ea789068..6ab270651 100644 --- a/netbox/dcim/forms/bulk_import.py +++ b/netbox/dcim/forms/bulk_import.py @@ -1396,7 +1396,12 @@ class CableImportForm(NetBoxModelImportForm): required=False, help_text=_('Length unit') ) - + color = forms.CharField( + label=_('Color'), + required=False, + max_length=16, + help_text=_('Color name (e.g. "Red") or hex code (e.g. "f44336")') + ) class Meta: model = Cable fields = [ @@ -1440,6 +1445,22 @@ class CableImportForm(NetBoxModelImportForm): setattr(self.instance, f'{side}_terminations', [termination_object]) return termination_object + def _clean_color(self, color): + """ + Derive a colors hex code + + :param color: color as hex or color name + """ + color_parsed = color.strip().lower() + + for hex_code, label in ColorChoices.CHOICES: + if color_parsed == hex_code.lower() or color == label.lower(): + return hex_code + + raise forms.ValidationError( + f"'{color}' is not a valid color. Use a valid color name Example: Red or hex code, Example: f44336" + ) + def clean_side_a_name(self): return self._clean_side('a') @@ -1451,11 +1472,15 @@ class CableImportForm(NetBoxModelImportForm): length_unit = self.cleaned_data.get('length_unit', None) return length_unit if length_unit is not None else '' + def clean_color(self): + color = self.cleaned_data.get('color', None) + return self._clean_color(color) if color is not None else '' # # Virtual chassis # + class VirtualChassisImportForm(NetBoxModelImportForm): master = CSVModelChoiceField( label=_('Master'),