mirror of
https://github.com/netbox-community/netbox.git
synced 2024-05-10 07:54:54 +00:00
* Redirect user to filtered objects list after bulk import * Remove obsolete table attribute from bulk import views
This commit is contained in:
@ -33,6 +33,7 @@ A new ASN range model has been introduced to facilitate the provisioning of new
|
|||||||
* [#9073](https://github.com/netbox-community/netbox/issues/9073) - Enable syncing config context data from remote sources
|
* [#9073](https://github.com/netbox-community/netbox/issues/9073) - Enable syncing config context data from remote sources
|
||||||
* [#9653](https://github.com/netbox-community/netbox/issues/9653) - Enable setting a default platform for device types
|
* [#9653](https://github.com/netbox-community/netbox/issues/9653) - Enable setting a default platform for device types
|
||||||
* [#10054](https://github.com/netbox-community/netbox/issues/10054) - Introduce advanced object selector for UI forms
|
* [#10054](https://github.com/netbox-community/netbox/issues/10054) - Introduce advanced object selector for UI forms
|
||||||
|
* [#10242](https://github.com/netbox-community/netbox/issues/10242) - Redirect to filter objects list after bulk import
|
||||||
* [#10374](https://github.com/netbox-community/netbox/issues/10374) - Require unique tenant names & slugs per group (not globally)
|
* [#10374](https://github.com/netbox-community/netbox/issues/10374) - Require unique tenant names & slugs per group (not globally)
|
||||||
* [#10729](https://github.com/netbox-community/netbox/issues/10729) - Add date & time custom field type
|
* [#10729](https://github.com/netbox-community/netbox/issues/10729) - Add date & time custom field type
|
||||||
* [#11254](https://github.com/netbox-community/netbox/issues/11254) - Introduce the `X-Request-ID` HTTP header to annotate the unique ID of each request for change logging
|
* [#11254](https://github.com/netbox-community/netbox/issues/11254) - Introduce the `X-Request-ID` HTTP header to annotate the unique ID of each request for change logging
|
||||||
|
@ -53,7 +53,6 @@ class ProviderDeleteView(generic.ObjectDeleteView):
|
|||||||
class ProviderBulkImportView(generic.BulkImportView):
|
class ProviderBulkImportView(generic.BulkImportView):
|
||||||
queryset = Provider.objects.all()
|
queryset = Provider.objects.all()
|
||||||
model_form = forms.ProviderImportForm
|
model_form = forms.ProviderImportForm
|
||||||
table = tables.ProviderTable
|
|
||||||
|
|
||||||
|
|
||||||
class ProviderBulkEditView(generic.BulkEditView):
|
class ProviderBulkEditView(generic.BulkEditView):
|
||||||
@ -115,7 +114,6 @@ class ProviderNetworkDeleteView(generic.ObjectDeleteView):
|
|||||||
class ProviderNetworkBulkImportView(generic.BulkImportView):
|
class ProviderNetworkBulkImportView(generic.BulkImportView):
|
||||||
queryset = ProviderNetwork.objects.all()
|
queryset = ProviderNetwork.objects.all()
|
||||||
model_form = forms.ProviderNetworkImportForm
|
model_form = forms.ProviderNetworkImportForm
|
||||||
table = tables.ProviderNetworkTable
|
|
||||||
|
|
||||||
|
|
||||||
class ProviderNetworkBulkEditView(generic.BulkEditView):
|
class ProviderNetworkBulkEditView(generic.BulkEditView):
|
||||||
@ -172,7 +170,6 @@ class CircuitTypeDeleteView(generic.ObjectDeleteView):
|
|||||||
class CircuitTypeBulkImportView(generic.BulkImportView):
|
class CircuitTypeBulkImportView(generic.BulkImportView):
|
||||||
queryset = CircuitType.objects.all()
|
queryset = CircuitType.objects.all()
|
||||||
model_form = forms.CircuitTypeImportForm
|
model_form = forms.CircuitTypeImportForm
|
||||||
table = tables.CircuitTypeTable
|
|
||||||
|
|
||||||
|
|
||||||
class CircuitTypeBulkEditView(generic.BulkEditView):
|
class CircuitTypeBulkEditView(generic.BulkEditView):
|
||||||
@ -224,7 +221,6 @@ class CircuitDeleteView(generic.ObjectDeleteView):
|
|||||||
class CircuitBulkImportView(generic.BulkImportView):
|
class CircuitBulkImportView(generic.BulkImportView):
|
||||||
queryset = Circuit.objects.all()
|
queryset = Circuit.objects.all()
|
||||||
model_form = forms.CircuitImportForm
|
model_form = forms.CircuitImportForm
|
||||||
table = tables.CircuitTable
|
|
||||||
additional_permissions = [
|
additional_permissions = [
|
||||||
'circuits.add_circuittermination',
|
'circuits.add_circuittermination',
|
||||||
]
|
]
|
||||||
|
@ -70,7 +70,6 @@ class DataSourceDeleteView(generic.ObjectDeleteView):
|
|||||||
class DataSourceBulkImportView(generic.BulkImportView):
|
class DataSourceBulkImportView(generic.BulkImportView):
|
||||||
queryset = DataSource.objects.all()
|
queryset = DataSource.objects.all()
|
||||||
model_form = forms.DataSourceImportForm
|
model_form = forms.DataSourceImportForm
|
||||||
table = tables.DataSourceTable
|
|
||||||
|
|
||||||
|
|
||||||
class DataSourceBulkEditView(generic.BulkEditView):
|
class DataSourceBulkEditView(generic.BulkEditView):
|
||||||
|
@ -1994,7 +1994,7 @@ class ModuleTestCase(
|
|||||||
}
|
}
|
||||||
|
|
||||||
initial_count = Module.objects.count()
|
initial_count = Module.objects.count()
|
||||||
self.assertHttpStatus(self.client.post(**request), 200)
|
self.assertHttpStatus(self.client.post(**request), 302)
|
||||||
self.assertEqual(Module.objects.count(), initial_count + len(csv_data) - 1)
|
self.assertEqual(Module.objects.count(), initial_count + len(csv_data) - 1)
|
||||||
self.assertEqual(Interface.objects.filter(device=device).count(), 0)
|
self.assertEqual(Interface.objects.filter(device=device).count(), 0)
|
||||||
|
|
||||||
@ -2010,7 +2010,7 @@ class ModuleTestCase(
|
|||||||
}
|
}
|
||||||
|
|
||||||
initial_count = Module.objects.count()
|
initial_count = Module.objects.count()
|
||||||
self.assertHttpStatus(self.client.post(**request), 200)
|
self.assertHttpStatus(self.client.post(**request), 302)
|
||||||
self.assertEqual(Module.objects.count(), initial_count + len(csv_data) - 1)
|
self.assertEqual(Module.objects.count(), initial_count + len(csv_data) - 1)
|
||||||
self.assertEqual(Interface.objects.filter(device=device).count(), 5)
|
self.assertEqual(Interface.objects.filter(device=device).count(), 5)
|
||||||
|
|
||||||
@ -2086,7 +2086,7 @@ class ModuleTestCase(
|
|||||||
}
|
}
|
||||||
|
|
||||||
initial_count = self._get_queryset().count()
|
initial_count = self._get_queryset().count()
|
||||||
self.assertHttpStatus(self.client.post(**request), 200)
|
self.assertHttpStatus(self.client.post(**request), 302)
|
||||||
self.assertEqual(self._get_queryset().count(), initial_count + len(csv_data) - 1)
|
self.assertEqual(self._get_queryset().count(), initial_count + len(csv_data) - 1)
|
||||||
|
|
||||||
# Re-retrieve interface to get new module id
|
# Re-retrieve interface to get new module id
|
||||||
|
@ -27,7 +27,6 @@ from utilities.views import GetReturnURLMixin, ObjectPermissionRequiredMixin, Vi
|
|||||||
from virtualization.models import VirtualMachine
|
from virtualization.models import VirtualMachine
|
||||||
from . import filtersets, forms, tables
|
from . import filtersets, forms, tables
|
||||||
from .choices import DeviceFaceChoices
|
from .choices import DeviceFaceChoices
|
||||||
from .constants import NONCONNECTABLE_IFACE_TYPES
|
|
||||||
from .models import *
|
from .models import *
|
||||||
|
|
||||||
CABLE_TERMINATION_TYPES = {
|
CABLE_TERMINATION_TYPES = {
|
||||||
@ -240,7 +239,6 @@ class RegionDeleteView(generic.ObjectDeleteView):
|
|||||||
class RegionBulkImportView(generic.BulkImportView):
|
class RegionBulkImportView(generic.BulkImportView):
|
||||||
queryset = Region.objects.all()
|
queryset = Region.objects.all()
|
||||||
model_form = forms.RegionImportForm
|
model_form = forms.RegionImportForm
|
||||||
table = tables.RegionTable
|
|
||||||
|
|
||||||
|
|
||||||
class RegionBulkEditView(generic.BulkEditView):
|
class RegionBulkEditView(generic.BulkEditView):
|
||||||
@ -316,7 +314,6 @@ class SiteGroupDeleteView(generic.ObjectDeleteView):
|
|||||||
class SiteGroupBulkImportView(generic.BulkImportView):
|
class SiteGroupBulkImportView(generic.BulkImportView):
|
||||||
queryset = SiteGroup.objects.all()
|
queryset = SiteGroup.objects.all()
|
||||||
model_form = forms.SiteGroupImportForm
|
model_form = forms.SiteGroupImportForm
|
||||||
table = tables.SiteGroupTable
|
|
||||||
|
|
||||||
|
|
||||||
class SiteGroupBulkEditView(generic.BulkEditView):
|
class SiteGroupBulkEditView(generic.BulkEditView):
|
||||||
@ -422,7 +419,6 @@ class SiteDeleteView(generic.ObjectDeleteView):
|
|||||||
class SiteBulkImportView(generic.BulkImportView):
|
class SiteBulkImportView(generic.BulkImportView):
|
||||||
queryset = Site.objects.all()
|
queryset = Site.objects.all()
|
||||||
model_form = forms.SiteImportForm
|
model_form = forms.SiteImportForm
|
||||||
table = tables.SiteTable
|
|
||||||
|
|
||||||
|
|
||||||
class SiteBulkEditView(generic.BulkEditView):
|
class SiteBulkEditView(generic.BulkEditView):
|
||||||
@ -499,7 +495,6 @@ class LocationDeleteView(generic.ObjectDeleteView):
|
|||||||
class LocationBulkImportView(generic.BulkImportView):
|
class LocationBulkImportView(generic.BulkImportView):
|
||||||
queryset = Location.objects.all()
|
queryset = Location.objects.all()
|
||||||
model_form = forms.LocationImportForm
|
model_form = forms.LocationImportForm
|
||||||
table = tables.LocationTable
|
|
||||||
|
|
||||||
|
|
||||||
class LocationBulkEditView(generic.BulkEditView):
|
class LocationBulkEditView(generic.BulkEditView):
|
||||||
@ -568,7 +563,6 @@ class RackRoleDeleteView(generic.ObjectDeleteView):
|
|||||||
class RackRoleBulkImportView(generic.BulkImportView):
|
class RackRoleBulkImportView(generic.BulkImportView):
|
||||||
queryset = RackRole.objects.all()
|
queryset = RackRole.objects.all()
|
||||||
model_form = forms.RackRoleImportForm
|
model_form = forms.RackRoleImportForm
|
||||||
table = tables.RackRoleTable
|
|
||||||
|
|
||||||
|
|
||||||
class RackRoleBulkEditView(generic.BulkEditView):
|
class RackRoleBulkEditView(generic.BulkEditView):
|
||||||
@ -728,7 +722,6 @@ class RackDeleteView(generic.ObjectDeleteView):
|
|||||||
class RackBulkImportView(generic.BulkImportView):
|
class RackBulkImportView(generic.BulkImportView):
|
||||||
queryset = Rack.objects.all()
|
queryset = Rack.objects.all()
|
||||||
model_form = forms.RackImportForm
|
model_form = forms.RackImportForm
|
||||||
table = tables.RackTable
|
|
||||||
|
|
||||||
|
|
||||||
class RackBulkEditView(generic.BulkEditView):
|
class RackBulkEditView(generic.BulkEditView):
|
||||||
@ -781,7 +774,6 @@ class RackReservationDeleteView(generic.ObjectDeleteView):
|
|||||||
class RackReservationImportView(generic.BulkImportView):
|
class RackReservationImportView(generic.BulkImportView):
|
||||||
queryset = RackReservation.objects.all()
|
queryset = RackReservation.objects.all()
|
||||||
model_form = forms.RackReservationImportForm
|
model_form = forms.RackReservationImportForm
|
||||||
table = tables.RackReservationTable
|
|
||||||
|
|
||||||
def save_object(self, object_form, request):
|
def save_object(self, object_form, request):
|
||||||
"""
|
"""
|
||||||
@ -854,7 +846,6 @@ class ManufacturerDeleteView(generic.ObjectDeleteView):
|
|||||||
class ManufacturerBulkImportView(generic.BulkImportView):
|
class ManufacturerBulkImportView(generic.BulkImportView):
|
||||||
queryset = Manufacturer.objects.all()
|
queryset = Manufacturer.objects.all()
|
||||||
model_form = forms.ManufacturerImportForm
|
model_form = forms.ManufacturerImportForm
|
||||||
table = tables.ManufacturerTable
|
|
||||||
|
|
||||||
|
|
||||||
class ManufacturerBulkEditView(generic.BulkEditView):
|
class ManufacturerBulkEditView(generic.BulkEditView):
|
||||||
@ -1083,7 +1074,6 @@ class DeviceTypeImportView(generic.BulkImportView):
|
|||||||
]
|
]
|
||||||
queryset = DeviceType.objects.all()
|
queryset = DeviceType.objects.all()
|
||||||
model_form = forms.DeviceTypeImportForm
|
model_form = forms.DeviceTypeImportForm
|
||||||
table = tables.DeviceTypeTable
|
|
||||||
related_object_forms = {
|
related_object_forms = {
|
||||||
'console-ports': forms.ConsolePortTemplateImportForm,
|
'console-ports': forms.ConsolePortTemplateImportForm,
|
||||||
'console-server-ports': forms.ConsoleServerPortTemplateImportForm,
|
'console-server-ports': forms.ConsoleServerPortTemplateImportForm,
|
||||||
@ -1275,7 +1265,6 @@ class ModuleTypeImportView(generic.BulkImportView):
|
|||||||
]
|
]
|
||||||
queryset = ModuleType.objects.all()
|
queryset = ModuleType.objects.all()
|
||||||
model_form = forms.ModuleTypeImportForm
|
model_form = forms.ModuleTypeImportForm
|
||||||
table = tables.ModuleTypeTable
|
|
||||||
related_object_forms = {
|
related_object_forms = {
|
||||||
'console-ports': forms.ConsolePortTemplateImportForm,
|
'console-ports': forms.ConsolePortTemplateImportForm,
|
||||||
'console-server-ports': forms.ConsoleServerPortTemplateImportForm,
|
'console-server-ports': forms.ConsoleServerPortTemplateImportForm,
|
||||||
@ -1722,7 +1711,6 @@ class DeviceRoleDeleteView(generic.ObjectDeleteView):
|
|||||||
class DeviceRoleBulkImportView(generic.BulkImportView):
|
class DeviceRoleBulkImportView(generic.BulkImportView):
|
||||||
queryset = DeviceRole.objects.all()
|
queryset = DeviceRole.objects.all()
|
||||||
model_form = forms.DeviceRoleImportForm
|
model_form = forms.DeviceRoleImportForm
|
||||||
table = tables.DeviceRoleTable
|
|
||||||
|
|
||||||
|
|
||||||
class DeviceRoleBulkEditView(generic.BulkEditView):
|
class DeviceRoleBulkEditView(generic.BulkEditView):
|
||||||
@ -1786,7 +1774,6 @@ class PlatformDeleteView(generic.ObjectDeleteView):
|
|||||||
class PlatformBulkImportView(generic.BulkImportView):
|
class PlatformBulkImportView(generic.BulkImportView):
|
||||||
queryset = Platform.objects.all()
|
queryset = Platform.objects.all()
|
||||||
model_form = forms.PlatformImportForm
|
model_form = forms.PlatformImportForm
|
||||||
table = tables.PlatformTable
|
|
||||||
|
|
||||||
|
|
||||||
class PlatformBulkEditView(generic.BulkEditView):
|
class PlatformBulkEditView(generic.BulkEditView):
|
||||||
@ -2047,7 +2034,6 @@ class DeviceConfigContextView(ObjectConfigContextView):
|
|||||||
class DeviceBulkImportView(generic.BulkImportView):
|
class DeviceBulkImportView(generic.BulkImportView):
|
||||||
queryset = Device.objects.all()
|
queryset = Device.objects.all()
|
||||||
model_form = forms.DeviceImportForm
|
model_form = forms.DeviceImportForm
|
||||||
table = tables.DeviceImportTable
|
|
||||||
|
|
||||||
def save_object(self, object_form, request):
|
def save_object(self, object_form, request):
|
||||||
obj = object_form.save()
|
obj = object_form.save()
|
||||||
@ -2125,7 +2111,6 @@ class ModuleDeleteView(generic.ObjectDeleteView):
|
|||||||
class ModuleBulkImportView(generic.BulkImportView):
|
class ModuleBulkImportView(generic.BulkImportView):
|
||||||
queryset = Module.objects.all()
|
queryset = Module.objects.all()
|
||||||
model_form = forms.ModuleImportForm
|
model_form = forms.ModuleImportForm
|
||||||
table = tables.ModuleTable
|
|
||||||
|
|
||||||
|
|
||||||
class ModuleBulkEditView(generic.BulkEditView):
|
class ModuleBulkEditView(generic.BulkEditView):
|
||||||
@ -2178,7 +2163,6 @@ class ConsolePortDeleteView(generic.ObjectDeleteView):
|
|||||||
class ConsolePortBulkImportView(generic.BulkImportView):
|
class ConsolePortBulkImportView(generic.BulkImportView):
|
||||||
queryset = ConsolePort.objects.all()
|
queryset = ConsolePort.objects.all()
|
||||||
model_form = forms.ConsolePortImportForm
|
model_form = forms.ConsolePortImportForm
|
||||||
table = tables.ConsolePortTable
|
|
||||||
|
|
||||||
|
|
||||||
class ConsolePortBulkEditView(generic.BulkEditView):
|
class ConsolePortBulkEditView(generic.BulkEditView):
|
||||||
@ -2243,7 +2227,6 @@ class ConsoleServerPortDeleteView(generic.ObjectDeleteView):
|
|||||||
class ConsoleServerPortBulkImportView(generic.BulkImportView):
|
class ConsoleServerPortBulkImportView(generic.BulkImportView):
|
||||||
queryset = ConsoleServerPort.objects.all()
|
queryset = ConsoleServerPort.objects.all()
|
||||||
model_form = forms.ConsoleServerPortImportForm
|
model_form = forms.ConsoleServerPortImportForm
|
||||||
table = tables.ConsoleServerPortTable
|
|
||||||
|
|
||||||
|
|
||||||
class ConsoleServerPortBulkEditView(generic.BulkEditView):
|
class ConsoleServerPortBulkEditView(generic.BulkEditView):
|
||||||
@ -2308,7 +2291,6 @@ class PowerPortDeleteView(generic.ObjectDeleteView):
|
|||||||
class PowerPortBulkImportView(generic.BulkImportView):
|
class PowerPortBulkImportView(generic.BulkImportView):
|
||||||
queryset = PowerPort.objects.all()
|
queryset = PowerPort.objects.all()
|
||||||
model_form = forms.PowerPortImportForm
|
model_form = forms.PowerPortImportForm
|
||||||
table = tables.PowerPortTable
|
|
||||||
|
|
||||||
|
|
||||||
class PowerPortBulkEditView(generic.BulkEditView):
|
class PowerPortBulkEditView(generic.BulkEditView):
|
||||||
@ -2373,7 +2355,6 @@ class PowerOutletDeleteView(generic.ObjectDeleteView):
|
|||||||
class PowerOutletBulkImportView(generic.BulkImportView):
|
class PowerOutletBulkImportView(generic.BulkImportView):
|
||||||
queryset = PowerOutlet.objects.all()
|
queryset = PowerOutlet.objects.all()
|
||||||
model_form = forms.PowerOutletImportForm
|
model_form = forms.PowerOutletImportForm
|
||||||
table = tables.PowerOutletTable
|
|
||||||
|
|
||||||
|
|
||||||
class PowerOutletBulkEditView(generic.BulkEditView):
|
class PowerOutletBulkEditView(generic.BulkEditView):
|
||||||
@ -2484,7 +2465,6 @@ class InterfaceDeleteView(generic.ObjectDeleteView):
|
|||||||
class InterfaceBulkImportView(generic.BulkImportView):
|
class InterfaceBulkImportView(generic.BulkImportView):
|
||||||
queryset = Interface.objects.all()
|
queryset = Interface.objects.all()
|
||||||
model_form = forms.InterfaceImportForm
|
model_form = forms.InterfaceImportForm
|
||||||
table = tables.InterfaceTable
|
|
||||||
|
|
||||||
|
|
||||||
class InterfaceBulkEditView(generic.BulkEditView):
|
class InterfaceBulkEditView(generic.BulkEditView):
|
||||||
@ -2549,7 +2529,6 @@ class FrontPortDeleteView(generic.ObjectDeleteView):
|
|||||||
class FrontPortBulkImportView(generic.BulkImportView):
|
class FrontPortBulkImportView(generic.BulkImportView):
|
||||||
queryset = FrontPort.objects.all()
|
queryset = FrontPort.objects.all()
|
||||||
model_form = forms.FrontPortImportForm
|
model_form = forms.FrontPortImportForm
|
||||||
table = tables.FrontPortTable
|
|
||||||
|
|
||||||
|
|
||||||
class FrontPortBulkEditView(generic.BulkEditView):
|
class FrontPortBulkEditView(generic.BulkEditView):
|
||||||
@ -2614,7 +2593,6 @@ class RearPortDeleteView(generic.ObjectDeleteView):
|
|||||||
class RearPortBulkImportView(generic.BulkImportView):
|
class RearPortBulkImportView(generic.BulkImportView):
|
||||||
queryset = RearPort.objects.all()
|
queryset = RearPort.objects.all()
|
||||||
model_form = forms.RearPortImportForm
|
model_form = forms.RearPortImportForm
|
||||||
table = tables.RearPortTable
|
|
||||||
|
|
||||||
|
|
||||||
class RearPortBulkEditView(generic.BulkEditView):
|
class RearPortBulkEditView(generic.BulkEditView):
|
||||||
@ -2679,7 +2657,6 @@ class ModuleBayDeleteView(generic.ObjectDeleteView):
|
|||||||
class ModuleBayBulkImportView(generic.BulkImportView):
|
class ModuleBayBulkImportView(generic.BulkImportView):
|
||||||
queryset = ModuleBay.objects.all()
|
queryset = ModuleBay.objects.all()
|
||||||
model_form = forms.ModuleBayImportForm
|
model_form = forms.ModuleBayImportForm
|
||||||
table = tables.ModuleBayTable
|
|
||||||
|
|
||||||
|
|
||||||
class ModuleBayBulkEditView(generic.BulkEditView):
|
class ModuleBayBulkEditView(generic.BulkEditView):
|
||||||
@ -2805,7 +2782,6 @@ class DeviceBayDepopulateView(generic.ObjectEditView):
|
|||||||
class DeviceBayBulkImportView(generic.BulkImportView):
|
class DeviceBayBulkImportView(generic.BulkImportView):
|
||||||
queryset = DeviceBay.objects.all()
|
queryset = DeviceBay.objects.all()
|
||||||
model_form = forms.DeviceBayImportForm
|
model_form = forms.DeviceBayImportForm
|
||||||
table = tables.DeviceBayTable
|
|
||||||
|
|
||||||
|
|
||||||
class DeviceBayBulkEditView(generic.BulkEditView):
|
class DeviceBayBulkEditView(generic.BulkEditView):
|
||||||
@ -2864,7 +2840,6 @@ class InventoryItemDeleteView(generic.ObjectDeleteView):
|
|||||||
class InventoryItemBulkImportView(generic.BulkImportView):
|
class InventoryItemBulkImportView(generic.BulkImportView):
|
||||||
queryset = InventoryItem.objects.all()
|
queryset = InventoryItem.objects.all()
|
||||||
model_form = forms.InventoryItemImportForm
|
model_form = forms.InventoryItemImportForm
|
||||||
table = tables.InventoryItemTable
|
|
||||||
|
|
||||||
|
|
||||||
class InventoryItemBulkEditView(generic.BulkEditView):
|
class InventoryItemBulkEditView(generic.BulkEditView):
|
||||||
@ -2921,7 +2896,6 @@ class InventoryItemRoleDeleteView(generic.ObjectDeleteView):
|
|||||||
class InventoryItemRoleBulkImportView(generic.BulkImportView):
|
class InventoryItemRoleBulkImportView(generic.BulkImportView):
|
||||||
queryset = InventoryItemRole.objects.all()
|
queryset = InventoryItemRole.objects.all()
|
||||||
model_form = forms.InventoryItemRoleImportForm
|
model_form = forms.InventoryItemRoleImportForm
|
||||||
table = tables.InventoryItemRoleTable
|
|
||||||
|
|
||||||
|
|
||||||
class InventoryItemRoleBulkEditView(generic.BulkEditView):
|
class InventoryItemRoleBulkEditView(generic.BulkEditView):
|
||||||
@ -3116,7 +3090,6 @@ class CableDeleteView(generic.ObjectDeleteView):
|
|||||||
class CableBulkImportView(generic.BulkImportView):
|
class CableBulkImportView(generic.BulkImportView):
|
||||||
queryset = Cable.objects.all()
|
queryset = Cable.objects.all()
|
||||||
model_form = forms.CableImportForm
|
model_form = forms.CableImportForm
|
||||||
table = tables.CableTable
|
|
||||||
|
|
||||||
|
|
||||||
class CableBulkEditView(generic.BulkEditView):
|
class CableBulkEditView(generic.BulkEditView):
|
||||||
@ -3399,7 +3372,6 @@ class VirtualChassisRemoveMemberView(ObjectPermissionRequiredMixin, GetReturnURL
|
|||||||
class VirtualChassisBulkImportView(generic.BulkImportView):
|
class VirtualChassisBulkImportView(generic.BulkImportView):
|
||||||
queryset = VirtualChassis.objects.all()
|
queryset = VirtualChassis.objects.all()
|
||||||
model_form = forms.VirtualChassisImportForm
|
model_form = forms.VirtualChassisImportForm
|
||||||
table = tables.VirtualChassisTable
|
|
||||||
|
|
||||||
|
|
||||||
class VirtualChassisBulkEditView(generic.BulkEditView):
|
class VirtualChassisBulkEditView(generic.BulkEditView):
|
||||||
@ -3456,7 +3428,6 @@ class PowerPanelDeleteView(generic.ObjectDeleteView):
|
|||||||
class PowerPanelBulkImportView(generic.BulkImportView):
|
class PowerPanelBulkImportView(generic.BulkImportView):
|
||||||
queryset = PowerPanel.objects.all()
|
queryset = PowerPanel.objects.all()
|
||||||
model_form = forms.PowerPanelImportForm
|
model_form = forms.PowerPanelImportForm
|
||||||
table = tables.PowerPanelTable
|
|
||||||
|
|
||||||
|
|
||||||
class PowerPanelBulkEditView(generic.BulkEditView):
|
class PowerPanelBulkEditView(generic.BulkEditView):
|
||||||
@ -3504,7 +3475,6 @@ class PowerFeedDeleteView(generic.ObjectDeleteView):
|
|||||||
class PowerFeedBulkImportView(generic.BulkImportView):
|
class PowerFeedBulkImportView(generic.BulkImportView):
|
||||||
queryset = PowerFeed.objects.all()
|
queryset = PowerFeed.objects.all()
|
||||||
model_form = forms.PowerFeedImportForm
|
model_form = forms.PowerFeedImportForm
|
||||||
table = tables.PowerFeedTable
|
|
||||||
|
|
||||||
|
|
||||||
class PowerFeedBulkEditView(generic.BulkEditView):
|
class PowerFeedBulkEditView(generic.BulkEditView):
|
||||||
@ -3566,7 +3536,6 @@ class VirtualDeviceContextDeleteView(generic.ObjectDeleteView):
|
|||||||
class VirtualDeviceContextBulkImportView(generic.BulkImportView):
|
class VirtualDeviceContextBulkImportView(generic.BulkImportView):
|
||||||
queryset = VirtualDeviceContext.objects.all()
|
queryset = VirtualDeviceContext.objects.all()
|
||||||
model_form = forms.VirtualDeviceContextImportForm
|
model_form = forms.VirtualDeviceContextImportForm
|
||||||
table = tables.VirtualDeviceContextTable
|
|
||||||
|
|
||||||
|
|
||||||
class VirtualDeviceContextBulkEditView(generic.BulkEditView):
|
class VirtualDeviceContextBulkEditView(generic.BulkEditView):
|
||||||
|
@ -1047,7 +1047,7 @@ class CustomFieldImportTest(TestCase):
|
|||||||
csv_data = '\n'.join(','.join(row) for row in data)
|
csv_data = '\n'.join(','.join(row) for row in data)
|
||||||
|
|
||||||
response = self.client.post(reverse('dcim:site_import'), {'data': csv_data, 'format': 'csv'})
|
response = self.client.post(reverse('dcim:site_import'), {'data': csv_data, 'format': 'csv'})
|
||||||
self.assertEqual(response.status_code, 200)
|
self.assertEqual(response.status_code, 302)
|
||||||
self.assertEqual(Site.objects.count(), 3)
|
self.assertEqual(Site.objects.count(), 3)
|
||||||
|
|
||||||
# Validate data for site 1
|
# Validate data for site 1
|
||||||
|
@ -55,7 +55,6 @@ class CustomFieldDeleteView(generic.ObjectDeleteView):
|
|||||||
class CustomFieldBulkImportView(generic.BulkImportView):
|
class CustomFieldBulkImportView(generic.BulkImportView):
|
||||||
queryset = CustomField.objects.all()
|
queryset = CustomField.objects.all()
|
||||||
model_form = forms.CustomFieldImportForm
|
model_form = forms.CustomFieldImportForm
|
||||||
table = tables.CustomFieldTable
|
|
||||||
|
|
||||||
|
|
||||||
class CustomFieldBulkEditView(generic.BulkEditView):
|
class CustomFieldBulkEditView(generic.BulkEditView):
|
||||||
@ -101,7 +100,6 @@ class CustomLinkDeleteView(generic.ObjectDeleteView):
|
|||||||
class CustomLinkBulkImportView(generic.BulkImportView):
|
class CustomLinkBulkImportView(generic.BulkImportView):
|
||||||
queryset = CustomLink.objects.all()
|
queryset = CustomLink.objects.all()
|
||||||
model_form = forms.CustomLinkImportForm
|
model_form = forms.CustomLinkImportForm
|
||||||
table = tables.CustomLinkTable
|
|
||||||
|
|
||||||
|
|
||||||
class CustomLinkBulkEditView(generic.BulkEditView):
|
class CustomLinkBulkEditView(generic.BulkEditView):
|
||||||
@ -149,7 +147,6 @@ class ExportTemplateDeleteView(generic.ObjectDeleteView):
|
|||||||
class ExportTemplateBulkImportView(generic.BulkImportView):
|
class ExportTemplateBulkImportView(generic.BulkImportView):
|
||||||
queryset = ExportTemplate.objects.all()
|
queryset = ExportTemplate.objects.all()
|
||||||
model_form = forms.ExportTemplateImportForm
|
model_form = forms.ExportTemplateImportForm
|
||||||
table = tables.ExportTemplateTable
|
|
||||||
|
|
||||||
|
|
||||||
class ExportTemplateBulkEditView(generic.BulkEditView):
|
class ExportTemplateBulkEditView(generic.BulkEditView):
|
||||||
@ -221,7 +218,6 @@ class SavedFilterDeleteView(SavedFilterMixin, generic.ObjectDeleteView):
|
|||||||
class SavedFilterBulkImportView(SavedFilterMixin, generic.BulkImportView):
|
class SavedFilterBulkImportView(SavedFilterMixin, generic.BulkImportView):
|
||||||
queryset = SavedFilter.objects.all()
|
queryset = SavedFilter.objects.all()
|
||||||
model_form = forms.SavedFilterImportForm
|
model_form = forms.SavedFilterImportForm
|
||||||
table = tables.SavedFilterTable
|
|
||||||
|
|
||||||
|
|
||||||
class SavedFilterBulkEditView(SavedFilterMixin, generic.BulkEditView):
|
class SavedFilterBulkEditView(SavedFilterMixin, generic.BulkEditView):
|
||||||
@ -267,7 +263,6 @@ class WebhookDeleteView(generic.ObjectDeleteView):
|
|||||||
class WebhookBulkImportView(generic.BulkImportView):
|
class WebhookBulkImportView(generic.BulkImportView):
|
||||||
queryset = Webhook.objects.all()
|
queryset = Webhook.objects.all()
|
||||||
model_form = forms.WebhookImportForm
|
model_form = forms.WebhookImportForm
|
||||||
table = tables.WebhookTable
|
|
||||||
|
|
||||||
|
|
||||||
class WebhookBulkEditView(generic.BulkEditView):
|
class WebhookBulkEditView(generic.BulkEditView):
|
||||||
@ -336,7 +331,6 @@ class TagDeleteView(generic.ObjectDeleteView):
|
|||||||
class TagBulkImportView(generic.BulkImportView):
|
class TagBulkImportView(generic.BulkImportView):
|
||||||
queryset = Tag.objects.all()
|
queryset = Tag.objects.all()
|
||||||
model_form = forms.TagImportForm
|
model_form = forms.TagImportForm
|
||||||
table = tables.TagTable
|
|
||||||
|
|
||||||
|
|
||||||
class TagBulkEditView(generic.BulkEditView):
|
class TagBulkEditView(generic.BulkEditView):
|
||||||
@ -489,7 +483,6 @@ class ConfigTemplateDeleteView(generic.ObjectDeleteView):
|
|||||||
class ConfigTemplateBulkImportView(generic.BulkImportView):
|
class ConfigTemplateBulkImportView(generic.BulkImportView):
|
||||||
queryset = ConfigTemplate.objects.all()
|
queryset = ConfigTemplate.objects.all()
|
||||||
model_form = forms.ConfigTemplateImportForm
|
model_form = forms.ConfigTemplateImportForm
|
||||||
table = tables.ConfigTemplateTable
|
|
||||||
|
|
||||||
|
|
||||||
class ConfigTemplateBulkEditView(generic.BulkEditView):
|
class ConfigTemplateBulkEditView(generic.BulkEditView):
|
||||||
|
@ -71,7 +71,6 @@ class VRFDeleteView(generic.ObjectDeleteView):
|
|||||||
class VRFBulkImportView(generic.BulkImportView):
|
class VRFBulkImportView(generic.BulkImportView):
|
||||||
queryset = VRF.objects.all()
|
queryset = VRF.objects.all()
|
||||||
model_form = forms.VRFImportForm
|
model_form = forms.VRFImportForm
|
||||||
table = tables.VRFTable
|
|
||||||
|
|
||||||
|
|
||||||
class VRFBulkEditView(generic.BulkEditView):
|
class VRFBulkEditView(generic.BulkEditView):
|
||||||
@ -117,7 +116,6 @@ class RouteTargetDeleteView(generic.ObjectDeleteView):
|
|||||||
class RouteTargetBulkImportView(generic.BulkImportView):
|
class RouteTargetBulkImportView(generic.BulkImportView):
|
||||||
queryset = RouteTarget.objects.all()
|
queryset = RouteTarget.objects.all()
|
||||||
model_form = forms.RouteTargetImportForm
|
model_form = forms.RouteTargetImportForm
|
||||||
table = tables.RouteTargetTable
|
|
||||||
|
|
||||||
|
|
||||||
class RouteTargetBulkEditView(generic.BulkEditView):
|
class RouteTargetBulkEditView(generic.BulkEditView):
|
||||||
@ -174,7 +172,6 @@ class RIRDeleteView(generic.ObjectDeleteView):
|
|||||||
class RIRBulkImportView(generic.BulkImportView):
|
class RIRBulkImportView(generic.BulkImportView):
|
||||||
queryset = RIR.objects.all()
|
queryset = RIR.objects.all()
|
||||||
model_form = forms.RIRImportForm
|
model_form = forms.RIRImportForm
|
||||||
table = tables.RIRTable
|
|
||||||
|
|
||||||
|
|
||||||
class RIRBulkEditView(generic.BulkEditView):
|
class RIRBulkEditView(generic.BulkEditView):
|
||||||
@ -245,7 +242,6 @@ class ASNRangeDeleteView(generic.ObjectDeleteView):
|
|||||||
class ASNRangeBulkImportView(generic.BulkImportView):
|
class ASNRangeBulkImportView(generic.BulkImportView):
|
||||||
queryset = ASNRange.objects.all()
|
queryset = ASNRange.objects.all()
|
||||||
model_form = forms.ASNRangeImportForm
|
model_form = forms.ASNRangeImportForm
|
||||||
table = tables.ASNRangeTable
|
|
||||||
|
|
||||||
|
|
||||||
class ASNRangeBulkEditView(generic.BulkEditView):
|
class ASNRangeBulkEditView(generic.BulkEditView):
|
||||||
@ -308,7 +304,6 @@ class ASNDeleteView(generic.ObjectDeleteView):
|
|||||||
class ASNBulkImportView(generic.BulkImportView):
|
class ASNBulkImportView(generic.BulkImportView):
|
||||||
queryset = ASN.objects.all()
|
queryset = ASN.objects.all()
|
||||||
model_form = forms.ASNImportForm
|
model_form = forms.ASNImportForm
|
||||||
table = tables.ASNTable
|
|
||||||
|
|
||||||
|
|
||||||
class ASNBulkEditView(generic.BulkEditView):
|
class ASNBulkEditView(generic.BulkEditView):
|
||||||
@ -395,7 +390,6 @@ class AggregateDeleteView(generic.ObjectDeleteView):
|
|||||||
class AggregateBulkImportView(generic.BulkImportView):
|
class AggregateBulkImportView(generic.BulkImportView):
|
||||||
queryset = Aggregate.objects.all()
|
queryset = Aggregate.objects.all()
|
||||||
model_form = forms.AggregateImportForm
|
model_form = forms.AggregateImportForm
|
||||||
table = tables.AggregateTable
|
|
||||||
|
|
||||||
|
|
||||||
class AggregateBulkEditView(generic.BulkEditView):
|
class AggregateBulkEditView(generic.BulkEditView):
|
||||||
@ -460,7 +454,6 @@ class RoleDeleteView(generic.ObjectDeleteView):
|
|||||||
class RoleBulkImportView(generic.BulkImportView):
|
class RoleBulkImportView(generic.BulkImportView):
|
||||||
queryset = Role.objects.all()
|
queryset = Role.objects.all()
|
||||||
model_form = forms.RoleImportForm
|
model_form = forms.RoleImportForm
|
||||||
table = tables.RoleTable
|
|
||||||
|
|
||||||
|
|
||||||
class RoleBulkEditView(generic.BulkEditView):
|
class RoleBulkEditView(generic.BulkEditView):
|
||||||
@ -638,7 +631,6 @@ class PrefixDeleteView(generic.ObjectDeleteView):
|
|||||||
class PrefixBulkImportView(generic.BulkImportView):
|
class PrefixBulkImportView(generic.BulkImportView):
|
||||||
queryset = Prefix.objects.all()
|
queryset = Prefix.objects.all()
|
||||||
model_form = forms.PrefixImportForm
|
model_form = forms.PrefixImportForm
|
||||||
table = tables.PrefixTable
|
|
||||||
|
|
||||||
|
|
||||||
class PrefixBulkEditView(generic.BulkEditView):
|
class PrefixBulkEditView(generic.BulkEditView):
|
||||||
@ -702,7 +694,6 @@ class IPRangeDeleteView(generic.ObjectDeleteView):
|
|||||||
class IPRangeBulkImportView(generic.BulkImportView):
|
class IPRangeBulkImportView(generic.BulkImportView):
|
||||||
queryset = IPRange.objects.all()
|
queryset = IPRange.objects.all()
|
||||||
model_form = forms.IPRangeImportForm
|
model_form = forms.IPRangeImportForm
|
||||||
table = tables.IPRangeTable
|
|
||||||
|
|
||||||
|
|
||||||
class IPRangeBulkEditView(generic.BulkEditView):
|
class IPRangeBulkEditView(generic.BulkEditView):
|
||||||
@ -864,7 +855,6 @@ class IPAddressBulkCreateView(generic.BulkCreateView):
|
|||||||
class IPAddressBulkImportView(generic.BulkImportView):
|
class IPAddressBulkImportView(generic.BulkImportView):
|
||||||
queryset = IPAddress.objects.all()
|
queryset = IPAddress.objects.all()
|
||||||
model_form = forms.IPAddressImportForm
|
model_form = forms.IPAddressImportForm
|
||||||
table = tables.IPAddressTable
|
|
||||||
|
|
||||||
|
|
||||||
class IPAddressBulkEditView(generic.BulkEditView):
|
class IPAddressBulkEditView(generic.BulkEditView):
|
||||||
@ -934,7 +924,6 @@ class VLANGroupDeleteView(generic.ObjectDeleteView):
|
|||||||
class VLANGroupBulkImportView(generic.BulkImportView):
|
class VLANGroupBulkImportView(generic.BulkImportView):
|
||||||
queryset = VLANGroup.objects.all()
|
queryset = VLANGroup.objects.all()
|
||||||
model_form = forms.VLANGroupImportForm
|
model_form = forms.VLANGroupImportForm
|
||||||
table = tables.VLANGroupTable
|
|
||||||
|
|
||||||
|
|
||||||
class VLANGroupBulkEditView(generic.BulkEditView):
|
class VLANGroupBulkEditView(generic.BulkEditView):
|
||||||
@ -1016,7 +1005,6 @@ class FHRPGroupDeleteView(generic.ObjectDeleteView):
|
|||||||
class FHRPGroupBulkImportView(generic.BulkImportView):
|
class FHRPGroupBulkImportView(generic.BulkImportView):
|
||||||
queryset = FHRPGroup.objects.all()
|
queryset = FHRPGroup.objects.all()
|
||||||
model_form = forms.FHRPGroupImportForm
|
model_form = forms.FHRPGroupImportForm
|
||||||
table = tables.FHRPGroupTable
|
|
||||||
|
|
||||||
|
|
||||||
class FHRPGroupBulkEditView(generic.BulkEditView):
|
class FHRPGroupBulkEditView(generic.BulkEditView):
|
||||||
@ -1132,7 +1120,6 @@ class VLANDeleteView(generic.ObjectDeleteView):
|
|||||||
class VLANBulkImportView(generic.BulkImportView):
|
class VLANBulkImportView(generic.BulkImportView):
|
||||||
queryset = VLAN.objects.all()
|
queryset = VLAN.objects.all()
|
||||||
model_form = forms.VLANImportForm
|
model_form = forms.VLANImportForm
|
||||||
table = tables.VLANTable
|
|
||||||
|
|
||||||
|
|
||||||
class VLANBulkEditView(generic.BulkEditView):
|
class VLANBulkEditView(generic.BulkEditView):
|
||||||
@ -1178,7 +1165,6 @@ class ServiceTemplateDeleteView(generic.ObjectDeleteView):
|
|||||||
class ServiceTemplateBulkImportView(generic.BulkImportView):
|
class ServiceTemplateBulkImportView(generic.BulkImportView):
|
||||||
queryset = ServiceTemplate.objects.all()
|
queryset = ServiceTemplate.objects.all()
|
||||||
model_form = forms.ServiceTemplateImportForm
|
model_form = forms.ServiceTemplateImportForm
|
||||||
table = tables.ServiceTemplateTable
|
|
||||||
|
|
||||||
|
|
||||||
class ServiceTemplateBulkEditView(generic.BulkEditView):
|
class ServiceTemplateBulkEditView(generic.BulkEditView):
|
||||||
@ -1231,7 +1217,6 @@ class ServiceDeleteView(generic.ObjectDeleteView):
|
|||||||
class ServiceBulkImportView(generic.BulkImportView):
|
class ServiceBulkImportView(generic.BulkImportView):
|
||||||
queryset = Service.objects.all()
|
queryset = Service.objects.all()
|
||||||
model_form = forms.ServiceImportForm
|
model_form = forms.ServiceImportForm
|
||||||
table = tables.ServiceTable
|
|
||||||
|
|
||||||
|
|
||||||
class ServiceBulkEditView(generic.BulkEditView):
|
class ServiceBulkEditView(generic.BulkEditView):
|
||||||
@ -1290,7 +1275,6 @@ class L2VPNDeleteView(generic.ObjectDeleteView):
|
|||||||
class L2VPNBulkImportView(generic.BulkImportView):
|
class L2VPNBulkImportView(generic.BulkImportView):
|
||||||
queryset = L2VPN.objects.all()
|
queryset = L2VPN.objects.all()
|
||||||
model_form = forms.L2VPNImportForm
|
model_form = forms.L2VPNImportForm
|
||||||
table = tables.L2VPNTable
|
|
||||||
|
|
||||||
|
|
||||||
class L2VPNBulkEditView(generic.BulkEditView):
|
class L2VPNBulkEditView(generic.BulkEditView):
|
||||||
@ -1337,7 +1321,6 @@ class L2VPNTerminationDeleteView(generic.ObjectDeleteView):
|
|||||||
class L2VPNTerminationBulkImportView(generic.BulkImportView):
|
class L2VPNTerminationBulkImportView(generic.BulkImportView):
|
||||||
queryset = L2VPNTermination.objects.all()
|
queryset = L2VPNTermination.objects.all()
|
||||||
model_form = forms.L2VPNTerminationImportForm
|
model_form = forms.L2VPNTerminationImportForm
|
||||||
table = tables.L2VPNTerminationTable
|
|
||||||
|
|
||||||
|
|
||||||
class L2VPNTerminationBulkEditView(generic.BulkEditView):
|
class L2VPNTerminationBulkEditView(generic.BulkEditView):
|
||||||
|
@ -42,7 +42,7 @@ class CSVImportTestCase(ModelViewTestCase):
|
|||||||
self.assertHttpStatus(self.client.get(self._get_url('import')), 200)
|
self.assertHttpStatus(self.client.get(self._get_url('import')), 200)
|
||||||
|
|
||||||
# Test POST with permission
|
# Test POST with permission
|
||||||
self.assertHttpStatus(self.client.post(self._get_url('import'), data), 200)
|
self.assertHttpStatus(self.client.post(self._get_url('import'), data), 302)
|
||||||
regions = Region.objects.all()
|
regions = Region.objects.all()
|
||||||
self.assertEqual(regions.count(), 4)
|
self.assertEqual(regions.count(), 4)
|
||||||
region = Region.objects.get(slug="region-4")
|
region = Region.objects.get(slug="region-4")
|
||||||
|
@ -11,6 +11,7 @@ from django.db.models.fields.reverse_related import ManyToManyRel
|
|||||||
from django.forms import ModelMultipleChoiceField, MultipleHiddenInput
|
from django.forms import ModelMultipleChoiceField, MultipleHiddenInput
|
||||||
from django.http import HttpResponse
|
from django.http import HttpResponse
|
||||||
from django.shortcuts import get_object_or_404, redirect, render
|
from django.shortcuts import get_object_or_404, redirect, render
|
||||||
|
from django.urls import reverse
|
||||||
from django.utils.safestring import mark_safe
|
from django.utils.safestring import mark_safe
|
||||||
from django_tables2.export import TableExport
|
from django_tables2.export import TableExport
|
||||||
|
|
||||||
@ -22,6 +23,7 @@ from utilities.forms import BulkRenameForm, ConfirmationForm, restrict_form_fiel
|
|||||||
from utilities.forms.bulk_import import ImportForm
|
from utilities.forms.bulk_import import ImportForm
|
||||||
from utilities.htmx import is_embedded, is_htmx
|
from utilities.htmx import is_embedded, is_htmx
|
||||||
from utilities.permissions import get_permission_for_model
|
from utilities.permissions import get_permission_for_model
|
||||||
|
from utilities.utils import get_viewname
|
||||||
from utilities.views import GetReturnURLMixin
|
from utilities.views import GetReturnURLMixin
|
||||||
from .base import BaseMultiObjectView
|
from .base import BaseMultiObjectView
|
||||||
from .mixins import ActionsMixin, TableMixin
|
from .mixins import ActionsMixin, TableMixin
|
||||||
@ -435,7 +437,7 @@ class BulkImportView(GetReturnURLMixin, BaseMultiObjectView):
|
|||||||
|
|
||||||
def post(self, request):
|
def post(self, request):
|
||||||
logger = logging.getLogger('netbox.views.BulkImportView')
|
logger = logging.getLogger('netbox.views.BulkImportView')
|
||||||
|
model = self.model_form._meta.model
|
||||||
form = ImportForm(request.POST, request.FILES)
|
form = ImportForm(request.POST, request.FILES)
|
||||||
|
|
||||||
if form.is_valid():
|
if form.is_valid():
|
||||||
@ -450,18 +452,14 @@ class BulkImportView(GetReturnURLMixin, BaseMultiObjectView):
|
|||||||
if self.queryset.filter(pk__in=[obj.pk for obj in new_objs]).count() != len(new_objs):
|
if self.queryset.filter(pk__in=[obj.pk for obj in new_objs]).count() != len(new_objs):
|
||||||
raise PermissionsViolation
|
raise PermissionsViolation
|
||||||
|
|
||||||
# Compile a table containing the imported objects
|
|
||||||
obj_table = self.table(new_objs)
|
|
||||||
|
|
||||||
if new_objs:
|
if new_objs:
|
||||||
msg = 'Imported {} {}'.format(len(new_objs), new_objs[0]._meta.verbose_name_plural)
|
msg = f"Imported {len(new_objs)} {model._meta.verbose_name_plural}"
|
||||||
logger.info(msg)
|
logger.info(msg)
|
||||||
messages.success(request, msg)
|
messages.success(request, msg)
|
||||||
|
|
||||||
return render(request, "import_success.html", {
|
view_name = get_viewname(model, action='list')
|
||||||
'table': obj_table,
|
results_url = f"{reverse(view_name)}?created_by_request={request.id}"
|
||||||
'return_url': self.get_return_url(request),
|
return redirect(results_url)
|
||||||
})
|
|
||||||
|
|
||||||
except (AbortTransaction, ValidationError):
|
except (AbortTransaction, ValidationError):
|
||||||
clear_webhooks.send(sender=self)
|
clear_webhooks.send(sender=self)
|
||||||
@ -475,7 +473,7 @@ class BulkImportView(GetReturnURLMixin, BaseMultiObjectView):
|
|||||||
logger.debug("Form validation failed")
|
logger.debug("Form validation failed")
|
||||||
|
|
||||||
return render(request, self.template_name, {
|
return render(request, self.template_name, {
|
||||||
'model': self.model_form._meta.model,
|
'model': model,
|
||||||
'form': form,
|
'form': form,
|
||||||
'fields': self.model_form().fields,
|
'fields': self.model_form().fields,
|
||||||
'return_url': self.get_return_url(request),
|
'return_url': self.get_return_url(request),
|
||||||
|
@ -1,17 +0,0 @@
|
|||||||
{% extends 'base/layout.html' %}
|
|
||||||
{% load render_table from django_tables2 %}
|
|
||||||
|
|
||||||
{% block title %}Import Completed{% endblock %}
|
|
||||||
|
|
||||||
{% block content %}
|
|
||||||
<div class="table-responsive">
|
|
||||||
{% render_table table 'inc/table.html' %}
|
|
||||||
</div>
|
|
||||||
{% if return_url %}
|
|
||||||
<a href="{{ return_url }}" class="btn btn-outline-dark">View All</a>
|
|
||||||
{% endif %}
|
|
||||||
<a href="{{ request.path }}" class="btn btn-primary">
|
|
||||||
<span class="mdi mdi-database-import-outline" aria-hidden="true"></span>
|
|
||||||
Import More
|
|
||||||
</a>
|
|
||||||
{% endblock content %}
|
|
@ -60,7 +60,6 @@ class TenantGroupDeleteView(generic.ObjectDeleteView):
|
|||||||
class TenantGroupBulkImportView(generic.BulkImportView):
|
class TenantGroupBulkImportView(generic.BulkImportView):
|
||||||
queryset = TenantGroup.objects.all()
|
queryset = TenantGroup.objects.all()
|
||||||
model_form = forms.TenantGroupImportForm
|
model_form = forms.TenantGroupImportForm
|
||||||
table = tables.TenantGroupTable
|
|
||||||
|
|
||||||
|
|
||||||
class TenantGroupBulkEditView(generic.BulkEditView):
|
class TenantGroupBulkEditView(generic.BulkEditView):
|
||||||
@ -150,7 +149,6 @@ class TenantDeleteView(generic.ObjectDeleteView):
|
|||||||
class TenantBulkImportView(generic.BulkImportView):
|
class TenantBulkImportView(generic.BulkImportView):
|
||||||
queryset = Tenant.objects.all()
|
queryset = Tenant.objects.all()
|
||||||
model_form = forms.TenantImportForm
|
model_form = forms.TenantImportForm
|
||||||
table = tables.TenantTable
|
|
||||||
|
|
||||||
|
|
||||||
class TenantBulkEditView(generic.BulkEditView):
|
class TenantBulkEditView(generic.BulkEditView):
|
||||||
@ -212,7 +210,6 @@ class ContactGroupDeleteView(generic.ObjectDeleteView):
|
|||||||
class ContactGroupBulkImportView(generic.BulkImportView):
|
class ContactGroupBulkImportView(generic.BulkImportView):
|
||||||
queryset = ContactGroup.objects.all()
|
queryset = ContactGroup.objects.all()
|
||||||
model_form = forms.ContactGroupImportForm
|
model_form = forms.ContactGroupImportForm
|
||||||
table = tables.ContactGroupTable
|
|
||||||
|
|
||||||
|
|
||||||
class ContactGroupBulkEditView(generic.BulkEditView):
|
class ContactGroupBulkEditView(generic.BulkEditView):
|
||||||
@ -278,7 +275,6 @@ class ContactRoleDeleteView(generic.ObjectDeleteView):
|
|||||||
class ContactRoleBulkImportView(generic.BulkImportView):
|
class ContactRoleBulkImportView(generic.BulkImportView):
|
||||||
queryset = ContactRole.objects.all()
|
queryset = ContactRole.objects.all()
|
||||||
model_form = forms.ContactRoleImportForm
|
model_form = forms.ContactRoleImportForm
|
||||||
table = tables.ContactRoleTable
|
|
||||||
|
|
||||||
|
|
||||||
class ContactRoleBulkEditView(generic.BulkEditView):
|
class ContactRoleBulkEditView(generic.BulkEditView):
|
||||||
@ -325,7 +321,6 @@ class ContactDeleteView(generic.ObjectDeleteView):
|
|||||||
class ContactBulkImportView(generic.BulkImportView):
|
class ContactBulkImportView(generic.BulkImportView):
|
||||||
queryset = Contact.objects.all()
|
queryset = Contact.objects.all()
|
||||||
model_form = forms.ContactImportForm
|
model_form = forms.ContactImportForm
|
||||||
table = tables.ContactTable
|
|
||||||
|
|
||||||
|
|
||||||
class ContactBulkEditView(generic.BulkEditView):
|
class ContactBulkEditView(generic.BulkEditView):
|
||||||
|
@ -592,7 +592,7 @@ class ViewTestCases:
|
|||||||
self.assertHttpStatus(self.client.get(self._get_url('import')), 200)
|
self.assertHttpStatus(self.client.get(self._get_url('import')), 200)
|
||||||
|
|
||||||
# Test POST with permission
|
# Test POST with permission
|
||||||
self.assertHttpStatus(self.client.post(self._get_url('import'), data), 200)
|
self.assertHttpStatus(self.client.post(self._get_url('import'), data), 302)
|
||||||
self.assertEqual(self._get_queryset().count(), initial_count + len(self.csv_data) - 1)
|
self.assertEqual(self._get_queryset().count(), initial_count + len(self.csv_data) - 1)
|
||||||
|
|
||||||
@override_settings(EXEMPT_VIEW_PERMISSIONS=['*'])
|
@override_settings(EXEMPT_VIEW_PERMISSIONS=['*'])
|
||||||
@ -617,7 +617,7 @@ class ViewTestCases:
|
|||||||
obj_perm.object_types.add(ContentType.objects.get_for_model(self.model))
|
obj_perm.object_types.add(ContentType.objects.get_for_model(self.model))
|
||||||
|
|
||||||
# Test POST with permission
|
# Test POST with permission
|
||||||
self.assertHttpStatus(self.client.post(self._get_url('import'), data), 200)
|
self.assertHttpStatus(self.client.post(self._get_url('import'), data), 302)
|
||||||
self.assertEqual(initial_count, self._get_queryset().count())
|
self.assertEqual(initial_count, self._get_queryset().count())
|
||||||
|
|
||||||
reader = csv.DictReader(array, delimiter=',')
|
reader = csv.DictReader(array, delimiter=',')
|
||||||
@ -659,7 +659,7 @@ class ViewTestCases:
|
|||||||
obj_perm.save()
|
obj_perm.save()
|
||||||
|
|
||||||
# Import permitted objects
|
# Import permitted objects
|
||||||
self.assertHttpStatus(self.client.post(self._get_url('import'), data), 200)
|
self.assertHttpStatus(self.client.post(self._get_url('import'), data), 302)
|
||||||
self.assertEqual(self._get_queryset().count(), initial_count + len(self.csv_data) - 1)
|
self.assertEqual(self._get_queryset().count(), initial_count + len(self.csv_data) - 1)
|
||||||
|
|
||||||
class BulkEditObjectsViewTestCase(ModelViewTestCase):
|
class BulkEditObjectsViewTestCase(ModelViewTestCase):
|
||||||
|
@ -59,7 +59,6 @@ class ClusterTypeDeleteView(generic.ObjectDeleteView):
|
|||||||
class ClusterTypeBulkImportView(generic.BulkImportView):
|
class ClusterTypeBulkImportView(generic.BulkImportView):
|
||||||
queryset = ClusterType.objects.all()
|
queryset = ClusterType.objects.all()
|
||||||
model_form = forms.ClusterTypeImportForm
|
model_form = forms.ClusterTypeImportForm
|
||||||
table = tables.ClusterTypeTable
|
|
||||||
|
|
||||||
|
|
||||||
class ClusterTypeBulkEditView(generic.BulkEditView):
|
class ClusterTypeBulkEditView(generic.BulkEditView):
|
||||||
@ -121,7 +120,6 @@ class ClusterGroupBulkImportView(generic.BulkImportView):
|
|||||||
cluster_count=count_related(Cluster, 'group')
|
cluster_count=count_related(Cluster, 'group')
|
||||||
)
|
)
|
||||||
model_form = forms.ClusterGroupImportForm
|
model_form = forms.ClusterGroupImportForm
|
||||||
table = tables.ClusterGroupTable
|
|
||||||
|
|
||||||
|
|
||||||
class ClusterGroupBulkEditView(generic.BulkEditView):
|
class ClusterGroupBulkEditView(generic.BulkEditView):
|
||||||
@ -213,7 +211,6 @@ class ClusterDeleteView(generic.ObjectDeleteView):
|
|||||||
class ClusterBulkImportView(generic.BulkImportView):
|
class ClusterBulkImportView(generic.BulkImportView):
|
||||||
queryset = Cluster.objects.all()
|
queryset = Cluster.objects.all()
|
||||||
model_form = forms.ClusterImportForm
|
model_form = forms.ClusterImportForm
|
||||||
table = tables.ClusterTable
|
|
||||||
|
|
||||||
|
|
||||||
class ClusterBulkEditView(generic.BulkEditView):
|
class ClusterBulkEditView(generic.BulkEditView):
|
||||||
@ -376,7 +373,6 @@ class VirtualMachineDeleteView(generic.ObjectDeleteView):
|
|||||||
class VirtualMachineBulkImportView(generic.BulkImportView):
|
class VirtualMachineBulkImportView(generic.BulkImportView):
|
||||||
queryset = VirtualMachine.objects.all()
|
queryset = VirtualMachine.objects.all()
|
||||||
model_form = forms.VirtualMachineImportForm
|
model_form = forms.VirtualMachineImportForm
|
||||||
table = tables.VirtualMachineTable
|
|
||||||
|
|
||||||
|
|
||||||
class VirtualMachineBulkEditView(generic.BulkEditView):
|
class VirtualMachineBulkEditView(generic.BulkEditView):
|
||||||
@ -458,7 +454,6 @@ class VMInterfaceDeleteView(generic.ObjectDeleteView):
|
|||||||
class VMInterfaceBulkImportView(generic.BulkImportView):
|
class VMInterfaceBulkImportView(generic.BulkImportView):
|
||||||
queryset = VMInterface.objects.all()
|
queryset = VMInterface.objects.all()
|
||||||
model_form = forms.VMInterfaceImportForm
|
model_form = forms.VMInterfaceImportForm
|
||||||
table = tables.VMInterfaceTable
|
|
||||||
|
|
||||||
|
|
||||||
class VMInterfaceBulkEditView(generic.BulkEditView):
|
class VMInterfaceBulkEditView(generic.BulkEditView):
|
||||||
|
@ -52,7 +52,6 @@ class WirelessLANGroupDeleteView(generic.ObjectDeleteView):
|
|||||||
class WirelessLANGroupBulkImportView(generic.BulkImportView):
|
class WirelessLANGroupBulkImportView(generic.BulkImportView):
|
||||||
queryset = WirelessLANGroup.objects.all()
|
queryset = WirelessLANGroup.objects.all()
|
||||||
model_form = forms.WirelessLANGroupImportForm
|
model_form = forms.WirelessLANGroupImportForm
|
||||||
table = tables.WirelessLANGroupTable
|
|
||||||
|
|
||||||
|
|
||||||
class WirelessLANGroupBulkEditView(generic.BulkEditView):
|
class WirelessLANGroupBulkEditView(generic.BulkEditView):
|
||||||
@ -123,7 +122,6 @@ class WirelessLANDeleteView(generic.ObjectDeleteView):
|
|||||||
class WirelessLANBulkImportView(generic.BulkImportView):
|
class WirelessLANBulkImportView(generic.BulkImportView):
|
||||||
queryset = WirelessLAN.objects.all()
|
queryset = WirelessLAN.objects.all()
|
||||||
model_form = forms.WirelessLANImportForm
|
model_form = forms.WirelessLANImportForm
|
||||||
table = tables.WirelessLANTable
|
|
||||||
|
|
||||||
|
|
||||||
class WirelessLANBulkEditView(generic.BulkEditView):
|
class WirelessLANBulkEditView(generic.BulkEditView):
|
||||||
@ -169,7 +167,6 @@ class WirelessLinkDeleteView(generic.ObjectDeleteView):
|
|||||||
class WirelessLinkBulkImportView(generic.BulkImportView):
|
class WirelessLinkBulkImportView(generic.BulkImportView):
|
||||||
queryset = WirelessLink.objects.all()
|
queryset = WirelessLink.objects.all()
|
||||||
model_form = forms.WirelessLinkImportForm
|
model_form = forms.WirelessLinkImportForm
|
||||||
table = tables.WirelessLinkTable
|
|
||||||
|
|
||||||
|
|
||||||
class WirelessLinkBulkEditView(generic.BulkEditView):
|
class WirelessLinkBulkEditView(generic.BulkEditView):
|
||||||
|
Reference in New Issue
Block a user