Skip to content

Commit 004f5c4

Browse files
committed
Fixes netbox-community#117: Improved device import validation
1 parent 995447a commit 004f5c4

File tree

2 files changed

+15
-8
lines changed

2 files changed

+15
-8
lines changed

netbox/dcim/forms.py

+11-7
Original file line numberDiff line numberDiff line change
@@ -427,7 +427,7 @@ class DeviceFromCSVForm(forms.ModelForm):
427427
'invalid_choice': 'Invalid site name.',
428428
})
429429
rack_name = forms.CharField()
430-
face = forms.ChoiceField(choices=[('Front', 'Front'), ('Rear', 'Rear')])
430+
face = forms.CharField(required=False)
431431

432432
class Meta:
433433
model = Device
@@ -446,7 +446,7 @@ def clean(self):
446446
try:
447447
self.instance.device_type = DeviceType.objects.get(manufacturer=manufacturer, model=model_name)
448448
except DeviceType.DoesNotExist:
449-
self.add_error('model_name', "Invalid device type ({})".format(model_name))
449+
self.add_error('model_name', "Invalid device type ({} {})".format(manufacturer, model_name))
450450

451451
# Validate rack
452452
if site and rack_name:
@@ -457,11 +457,15 @@ def clean(self):
457457

458458
def clean_face(self):
459459
face = self.cleaned_data['face']
460-
if face.lower() == 'front':
461-
return 0
462-
if face.lower() == 'rear':
463-
return 1
464-
raise forms.ValidationError("Invalid rack face ({})".format(face))
460+
if face:
461+
try:
462+
return {
463+
'front': 0,
464+
'rear': 1,
465+
}[face.lower()]
466+
except KeyError:
467+
raise forms.ValidationError('Invalid rack face ({}); must be "front" or "rear".'.format(face))
468+
return face
465469

466470

467471
class DeviceImportForm(BulkImportForm, BootstrapMixin):

netbox/dcim/models.py

+4-1
Original file line numberDiff line numberDiff line change
@@ -568,7 +568,10 @@ def clean(self):
568568
raise ValidationError("Must specify rack face with rack position.")
569569

570570
# Validate rack space
571-
rack_face = self.face if not self.device_type.is_full_depth else None
571+
try:
572+
rack_face = self.face if not self.device_type.is_full_depth else None
573+
except DeviceType.DoesNotExist:
574+
raise ValidationError("Must specify device type.")
572575
exclude_list = [self.pk] if self.pk else []
573576
try:
574577
available_units = self.rack.get_available_units(u_height=self.device_type.u_height, rack_face=rack_face,

0 commit comments

Comments
 (0)