mirror of
https://github.com/netbox-community/netbox.git
synced 2025-07-19 09:53:34 -06:00
fixes 17465 : add racktype on bulkimport and bulkedit of racks (#18077)
* fixes 17465 add racktype on bulkimport and bulkedit of racks * Make width & u_height optional when setting rack_type on import --------- Co-authored-by: Jeremy Stretch <jstretch@netboxlabs.com>
This commit is contained in:
parent
26f8c3aae3
commit
a15ff294dd
@ -359,6 +359,11 @@ class RackBulkEditForm(NetBoxModelBulkEditForm):
|
|||||||
queryset=RackRole.objects.all(),
|
queryset=RackRole.objects.all(),
|
||||||
required=False
|
required=False
|
||||||
)
|
)
|
||||||
|
rack_type = DynamicModelChoiceField(
|
||||||
|
label=_('Rack type'),
|
||||||
|
queryset=RackType.objects.all(),
|
||||||
|
required=False,
|
||||||
|
)
|
||||||
serial = forms.CharField(
|
serial = forms.CharField(
|
||||||
max_length=50,
|
max_length=50,
|
||||||
required=False,
|
required=False,
|
||||||
@ -438,7 +443,7 @@ class RackBulkEditForm(NetBoxModelBulkEditForm):
|
|||||||
|
|
||||||
model = Rack
|
model = Rack
|
||||||
fieldsets = (
|
fieldsets = (
|
||||||
FieldSet('status', 'role', 'tenant', 'serial', 'asset_tag', 'description', name=_('Rack')),
|
FieldSet('status', 'role', 'tenant', 'serial', 'asset_tag', 'rack_type', 'description', name=_('Rack')),
|
||||||
FieldSet('region', 'site_group', 'site', 'location', name=_('Location')),
|
FieldSet('region', 'site_group', 'site', 'location', name=_('Location')),
|
||||||
FieldSet(
|
FieldSet(
|
||||||
'form_factor', 'width', 'u_height', 'desc_units', 'airflow', 'outer_width', 'outer_depth', 'outer_unit',
|
'form_factor', 'width', 'u_height', 'desc_units', 'airflow', 'outer_width', 'outer_depth', 'outer_unit',
|
||||||
|
@ -256,6 +256,13 @@ class RackImportForm(NetBoxModelImportForm):
|
|||||||
to_field_name='name',
|
to_field_name='name',
|
||||||
help_text=_('Name of assigned role')
|
help_text=_('Name of assigned role')
|
||||||
)
|
)
|
||||||
|
rack_type = CSVModelChoiceField(
|
||||||
|
label=_('Rack type'),
|
||||||
|
queryset=RackType.objects.all(),
|
||||||
|
to_field_name='model',
|
||||||
|
required=False,
|
||||||
|
help_text=_('Rack type model')
|
||||||
|
)
|
||||||
form_factor = CSVChoiceField(
|
form_factor = CSVChoiceField(
|
||||||
label=_('Type'),
|
label=_('Type'),
|
||||||
choices=RackFormFactorChoices,
|
choices=RackFormFactorChoices,
|
||||||
@ -265,8 +272,13 @@ class RackImportForm(NetBoxModelImportForm):
|
|||||||
width = forms.ChoiceField(
|
width = forms.ChoiceField(
|
||||||
label=_('Width'),
|
label=_('Width'),
|
||||||
choices=RackWidthChoices,
|
choices=RackWidthChoices,
|
||||||
|
required=False,
|
||||||
help_text=_('Rail-to-rail width (in inches)')
|
help_text=_('Rail-to-rail width (in inches)')
|
||||||
)
|
)
|
||||||
|
u_height = forms.IntegerField(
|
||||||
|
required=False,
|
||||||
|
label=_('Height (U)')
|
||||||
|
)
|
||||||
outer_unit = CSVChoiceField(
|
outer_unit = CSVChoiceField(
|
||||||
label=_('Outer unit'),
|
label=_('Outer unit'),
|
||||||
choices=RackDimensionUnitChoices,
|
choices=RackDimensionUnitChoices,
|
||||||
@ -289,9 +301,9 @@ class RackImportForm(NetBoxModelImportForm):
|
|||||||
class Meta:
|
class Meta:
|
||||||
model = Rack
|
model = Rack
|
||||||
fields = (
|
fields = (
|
||||||
'site', 'location', 'name', 'facility_id', 'tenant', 'status', 'role', 'form_factor', 'serial', 'asset_tag',
|
'site', 'location', 'name', 'facility_id', 'tenant', 'status', 'role', 'rack_type', 'form_factor', 'serial',
|
||||||
'width', 'u_height', 'desc_units', 'outer_width', 'outer_depth', 'outer_unit', 'mounting_depth', 'airflow',
|
'asset_tag', 'width', 'u_height', 'desc_units', 'outer_width', 'outer_depth', 'outer_unit',
|
||||||
'weight', 'max_weight', 'weight_unit', 'description', 'comments', 'tags',
|
'mounting_depth', 'airflow', 'weight', 'max_weight', 'weight_unit', 'description', 'comments', 'tags',
|
||||||
)
|
)
|
||||||
|
|
||||||
def __init__(self, data=None, *args, **kwargs):
|
def __init__(self, data=None, *args, **kwargs):
|
||||||
@ -303,6 +315,16 @@ class RackImportForm(NetBoxModelImportForm):
|
|||||||
params = {f"site__{self.fields['site'].to_field_name}": data.get('site')}
|
params = {f"site__{self.fields['site'].to_field_name}": data.get('site')}
|
||||||
self.fields['location'].queryset = self.fields['location'].queryset.filter(**params)
|
self.fields['location'].queryset = self.fields['location'].queryset.filter(**params)
|
||||||
|
|
||||||
|
def clean(self):
|
||||||
|
super().clean()
|
||||||
|
|
||||||
|
# width & u_height must be set if not specifying a rack type on import
|
||||||
|
if not self.instance.pk:
|
||||||
|
if not self.cleaned_data.get('rack_type') and not self.cleaned_data.get('width'):
|
||||||
|
raise forms.ValidationError(_("Width must be set if not specifying a rack type."))
|
||||||
|
if not self.cleaned_data.get('rack_type') and not self.cleaned_data.get('u_height'):
|
||||||
|
raise forms.ValidationError(_("U height must be set if not specifying a rack type."))
|
||||||
|
|
||||||
|
|
||||||
class RackReservationImportForm(NetBoxModelImportForm):
|
class RackReservationImportForm(NetBoxModelImportForm):
|
||||||
site = CSVModelChoiceField(
|
site = CSVModelChoiceField(
|
||||||
|
Loading…
Reference in New Issue
Block a user