mirror of
https://github.com/netbox-community/netbox.git
synced 2025-08-25 00:36:11 -06:00
Clean up bulk import view
This commit is contained in:
parent
797d839c9a
commit
6793e384df
@ -807,7 +807,7 @@ class RackReservationImportView(generic.BulkImportView):
|
||||
model_form = forms.RackReservationCSVForm
|
||||
table = tables.RackReservationTable
|
||||
|
||||
def _save_obj(self, obj_form, request):
|
||||
def save_object(self, obj_form, request):
|
||||
"""
|
||||
Assign the currently authenticated user to the RackReservation.
|
||||
"""
|
||||
@ -2028,8 +2028,7 @@ class ChildDeviceBulkImportView(generic.BulkImportView):
|
||||
table = tables.DeviceImportTable
|
||||
template_name = 'dcim/device_import_child.html'
|
||||
|
||||
def _save_obj(self, obj_form, request):
|
||||
|
||||
def save_object(self, obj_form, request):
|
||||
obj = obj_form.save()
|
||||
|
||||
# Save the reverse relation to the parent device bay
|
||||
|
@ -306,10 +306,10 @@ class BulkImportView(GetReturnURLMixin, BaseMultiObjectView):
|
||||
"""
|
||||
return data
|
||||
|
||||
def _create_object(self, request, model_form):
|
||||
def _save_object(self, model_form, request):
|
||||
|
||||
# Save the primary object
|
||||
obj = self._save_obj(model_form, request)
|
||||
obj = self.save_object(model_form, request)
|
||||
|
||||
# Enforce object-level permissions
|
||||
if not self.queryset.filter(pk=obj.pk).first():
|
||||
@ -345,15 +345,14 @@ class BulkImportView(GetReturnURLMixin, BaseMultiObjectView):
|
||||
|
||||
return obj
|
||||
|
||||
def _save_obj(self, obj_form, request):
|
||||
def save_object(self, obj_form, request):
|
||||
"""
|
||||
Provide a hook to modify the object immediately before saving it (e.g. to encrypt secret data).
|
||||
"""
|
||||
return obj_form.save()
|
||||
|
||||
def create_and_update_objects(self, form, request):
|
||||
created_objects = []
|
||||
updated_objects = []
|
||||
saved_objects = []
|
||||
|
||||
records = list(form.cleaned_data['data'])
|
||||
|
||||
@ -400,12 +399,8 @@ class BulkImportView(GetReturnURLMixin, BaseMultiObjectView):
|
||||
restrict_form_fields(model_form, request.user)
|
||||
|
||||
if model_form.is_valid():
|
||||
if object_id:
|
||||
obj = self._save_obj(model_form, request)
|
||||
updated_objects.append(obj)
|
||||
else:
|
||||
obj = self._create_object(request, model_form)
|
||||
created_objects.append(obj)
|
||||
obj = self._save_object(model_form, request)
|
||||
saved_objects.append(obj)
|
||||
else:
|
||||
# Replicate model form errors for display
|
||||
for field, errors in model_form.errors.items():
|
||||
@ -417,7 +412,7 @@ class BulkImportView(GetReturnURLMixin, BaseMultiObjectView):
|
||||
|
||||
raise ValidationError("")
|
||||
|
||||
return [*created_objects, *updated_objects]
|
||||
return saved_objects
|
||||
|
||||
#
|
||||
# Request handlers
|
||||
|
@ -123,8 +123,9 @@ class CSVModelForm(forms.ModelForm):
|
||||
"""
|
||||
ModelForm used for the import of objects in CSV format.
|
||||
"""
|
||||
def __init__(self, *args, headers=None, **kwargs):
|
||||
def __init__(self, *args, headers=None, fields=None, **kwargs):
|
||||
headers = headers or {}
|
||||
fields = fields or []
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
# Modify the model form to accommodate any customized to_field_name properties
|
||||
@ -132,6 +133,13 @@ class CSVModelForm(forms.ModelForm):
|
||||
if to_field is not None:
|
||||
self.fields[field].to_field_name = to_field
|
||||
|
||||
# Omit any fields not specified (e.g. because the form is being used to
|
||||
# updated rather than create objects)
|
||||
if fields:
|
||||
for field in list(self.fields.keys()):
|
||||
if field not in fields:
|
||||
del self.fields[field]
|
||||
|
||||
|
||||
class ImportForm(BootstrapMixin, forms.Form):
|
||||
data = forms.CharField(
|
||||
|
Loading…
Reference in New Issue
Block a user