diff --git a/netbox/dcim/forms.py b/netbox/dcim/forms.py index e51f50812..b0cb8434f 100644 --- a/netbox/dcim/forms.py +++ b/netbox/dcim/forms.py @@ -838,18 +838,12 @@ class RackReservationCSVForm(forms.ModelForm): 'invalid_choice': 'Invalid site name.', } ) - rack_group = forms.ModelChoiceField( - queryset=RackGroup.objects.all(), - to_field_name='name', + rack_group = forms.CharField( required=False, - help_text='Name of rack group', - error_messages={ - 'invalid_choice': 'Invalid rack group name.', - } + help_text="Rack's group (if any)" ) - rack = forms.CharField( - required=True, - help_text='Name of parent rack' + rack_name = forms.CharField( + help_text="Rack name" ) units = forms.CharField( required=True, @@ -867,8 +861,7 @@ class RackReservationCSVForm(forms.ModelForm): class Meta: model = RackReservation - # fields = RackReservation.csv_headers - fields = ['site', 'rack_group', 'rack', 'units', 'tenant', 'description'] # Can't set user + fields = ('site', 'rack_group', 'rack_name', 'units', 'tenant', 'description') help_texts = { } @@ -878,7 +871,7 @@ class RackReservationCSVForm(forms.ModelForm): site = self.cleaned_data.get('site') rack_group = self.cleaned_data.get('rack_group') - rack_name = self.cleaned_data.get('rack') + rack_name = self.cleaned_data.get('rack_name') # Validate rack if site and rack_group and rack_name: diff --git a/netbox/dcim/views.py b/netbox/dcim/views.py index 36838acd5..0bed00d58 100644 --- a/netbox/dcim/views.py +++ b/netbox/dcim/views.py @@ -506,6 +506,16 @@ class RackReservationImportView(PermissionRequiredMixin, BulkImportView): table = tables.RackReservationTable default_return_url = 'dcim:rackreservation_list' + def _save_obj(self, obj_form, request): + """ + Assign the currently authenticated user to the RackReservation. + """ + instance = obj_form.save(commit=False) + instance.user = request.user + instance.save() + + return instance + class RackReservationBulkEditView(PermissionRequiredMixin, BulkEditView): permission_required = 'dcim.change_rackreservation' @@ -1252,7 +1262,7 @@ class ChildDeviceBulkImportView(PermissionRequiredMixin, BulkImportView): template_name = 'dcim/device_import_child.html' default_return_url = 'dcim:device_list' - def _save_obj(self, obj_form): + def _save_obj(self, obj_form, request): obj = obj_form.save() diff --git a/netbox/secrets/views.py b/netbox/secrets/views.py index d92e4b64d..d66326c68 100644 --- a/netbox/secrets/views.py +++ b/netbox/secrets/views.py @@ -206,7 +206,7 @@ class SecretBulkImportView(BulkImportView): master_key = None - def _save_obj(self, obj_form): + def _save_obj(self, obj_form, request): """ Encrypt each object before saving it to the database. """ diff --git a/netbox/utilities/views.py b/netbox/utilities/views.py index e354c4dff..78acefa48 100644 --- a/netbox/utilities/views.py +++ b/netbox/utilities/views.py @@ -544,7 +544,7 @@ class BulkImportView(GetReturnURLMixin, View): return ImportForm(*args, **kwargs) - def _save_obj(self, obj_form): + def _save_obj(self, obj_form, request): """ Provide a hook to modify the object immediately before saving it (e.g. to encrypt secret data). """ @@ -573,7 +573,7 @@ class BulkImportView(GetReturnURLMixin, View): for row, data in enumerate(form.cleaned_data['csv'], start=1): obj_form = self.model_form(data) if obj_form.is_valid(): - obj = self._save_obj(obj_form) + obj = self._save_obj(obj_form, request) new_objs.append(obj) else: for field, err in obj_form.errors.items():