Просмотр исходного кода

Extend BulkImportView._save_obj to pass request context

Jeremy Stretch 6 лет назад
Родитель
Сommit
947affd78f
4 измененных файлов с 20 добавлено и 17 удалено
  1. 6 13
      netbox/dcim/forms.py
  2. 11 1
      netbox/dcim/views.py
  3. 1 1
      netbox/secrets/views.py
  4. 2 2
      netbox/utilities/views.py

+ 6 - 13
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:

+ 11 - 1
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()
 

+ 1 - 1
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.
         """

+ 2 - 2
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():