diff --git a/netbox/dcim/forms.py b/netbox/dcim/forms.py index a017a41bc..bd81f9303 100644 --- a/netbox/dcim/forms.py +++ b/netbox/dcim/forms.py @@ -50,25 +50,29 @@ def get_device_by_name_or_pk(name): return device -class ConnectionStatusCSVField(forms.CharField): +class ConnectionStatusCSVField(forms.ChoiceField): """ This field accepts either "planned" or "connected" as a connection status for CSV imports. """ + default_error_messages = { + 'invalid_choice': '%(value)s is not a valid connection status. It must be either "planned" or "connected."', + } + def __init__(self, *args, **kwargs): + kwargs['choices'] = ( + ('planned', 'planned'), + ('connected', 'connected'), + ) super(ConnectionStatusCSVField, self).__init__(*args, **kwargs) if not self.help_text: - self.help_text = 'Connection status ("planned" or "connected")' + self.help_text = 'Connection status' def clean(self, value): value = super(ConnectionStatusCSVField, self).clean(value) - try: - return { - 'planned': CONNECTION_STATUS_PLANNED, - 'connected': CONNECTION_STATUS_CONNECTED, - }[value.lower()] - except KeyError: - raise ValidationError( - 'Invalid connection status ({}); must be either "planned" or "connected".'.format(value)) + return { + 'planned': CONNECTION_STATUS_PLANNED, + 'connected': CONNECTION_STATUS_CONNECTED, + }[value.lower()] class DeviceComponentForm(BootstrapMixin, forms.Form):