#4347: Rename NetBoxModelCSVForm to NetBoxModelImportForm

This commit is contained in:
jeremystretch 2022-11-15 12:24:57 -05:00
parent d9d25ff4e7
commit 23c0ca456f
19 changed files with 248 additions and 233 deletions

View File

@ -5,9 +5,9 @@
NetBox provides several base form classes for use by plugins. NetBox provides several base form classes for use by plugins.
| Form Class | Purpose | | Form Class | Purpose |
|---------------------------|--------------------------------------| |----------------------------|--------------------------------------|
| `NetBoxModelForm` | Create/edit individual objects | | `NetBoxModelForm` | Create/edit individual objects |
| `NetBoxModelCSVForm` | Bulk import objects from CSV data | | `NetBoxModelImportForm` | Bulk import objects from CSV data |
| `NetBoxModelBulkEditForm` | Edit multiple objects simultaneously | | `NetBoxModelBulkEditForm` | Edit multiple objects simultaneously |
| `NetBoxModelFilterSetForm` | Filter objects within a list view | | `NetBoxModelFilterSetForm` | Filter objects within a list view |
@ -45,19 +45,20 @@ class MyModelForm(NetBoxModelForm):
!!! tip "Comment fields" !!! tip "Comment fields"
If your form has a `comments` field, there's no need to list it; this will always appear last on the page. If your form has a `comments` field, there's no need to list it; this will always appear last on the page.
### `NetBoxModelCSVForm` ### `NetBoxModelImportForm`
This form facilitates the bulk import of new objects from CSV data. As with model forms, you'll need to declare a `Meta` subclass specifying the associated `model` and `fields`. NetBox also provides several form fields suitable for import various types of CSV data, listed below. This form facilitates the bulk import of new objects from CSV, JSON, or YAML data. As with model forms, you'll need to declare a `Meta` subclass specifying the associated `model` and `fields`. NetBox also provides several form fields suitable for import various types of CSV data, listed below.
**Example** **Example**
```python ```python
from dcim.models import Site from dcim.models import Site
from netbox.forms import NetBoxModelCSVForm from netbox.forms import NetBoxModelImportForm
from utilities.forms import CSVModelChoiceField from utilities.forms import CSVModelChoiceField
from .models import MyModel from .models import MyModel
class MyModelCSVForm(NetBoxModelCSVForm):
class MyModelImportForm(NetBoxModelImportForm):
site = CSVModelChoiceField( site = CSVModelChoiceField(
queryset=Site.objects.all(), queryset=Site.objects.all(),
to_field_name='name', to_field_name='name',
@ -69,6 +70,9 @@ class MyModelCSVForm(NetBoxModelCSVForm):
fields = ('name', 'status', 'site', 'comments') fields = ('name', 'status', 'site', 'comments')
``` ```
!!! note "Previously NetBoxModelCSVForm"
This form class was previously named `NetBoxModelCSVForm`. It was renamed in NetBox v3.4 to convey support for JSON and YAML formats in addition to CSV. The `NetBoxModelCSVForm` class has been retained for backward compatibility and functions exactly the same as `NetBoxModelImportForm`. However, plugin authors should be aware that this backward compatability will be removed in NetBox v3.5.
### `NetBoxModelBulkEditForm` ### `NetBoxModelBulkEditForm`
This form facilitates editing multiple objects in bulk. Unlike a model form, this form does not have a child `Meta` class, and must explicitly define each field. All fields in a bulk edit form are generally declared with `required=False`. This form facilitates editing multiple objects in bulk. Unlike a model form, this form does not have a child `Meta` class, and must explicitly define each field. All fields in a bulk edit form are generally declared with `required=False`.
@ -84,11 +88,12 @@ This form facilitates editing multiple objects in bulk. Unlike a model form, thi
```python ```python
from django import forms from django import forms
from dcim.models import Site from dcim.models import Site
from netbox.forms import NetBoxModelCSVForm from netbox.forms import NetBoxModelImportForm
from utilities.forms import CommentField, DynamicModelChoiceField from utilities.forms import CommentField, DynamicModelChoiceField
from .models import MyModel, MyModelStatusChoices from .models import MyModel, MyModelStatusChoices
class MyModelEditForm(NetBoxModelCSVForm):
class MyModelEditForm(NetBoxModelImportForm):
name = forms.CharField( name = forms.CharField(
required=False required=False
) )

View File

@ -10,6 +10,7 @@
* The `noc_contact`, `admin_contact`, and `portal_url` fields have been removed from the provider model. Please replicate any data remaining in these fields to the contact model introduced in NetBox v3.1 prior to upgrading. * The `noc_contact`, `admin_contact`, and `portal_url` fields have been removed from the provider model. Please replicate any data remaining in these fields to the contact model introduced in NetBox v3.1 prior to upgrading.
* The `content_type` field on the CustomLink and ExportTemplate models have been renamed to `content_types` and now supports the assignment of multiple content types. * The `content_type` field on the CustomLink and ExportTemplate models have been renamed to `content_types` and now supports the assignment of multiple content types.
* The `cf` property on an object with custom fields now returns deserialized values. For example, a custom field referencing an object will return the object instance rather than its numeric ID. To access the raw serialized values, use `custom_field_data` instead. * The `cf` property on an object with custom fields now returns deserialized values. For example, a custom field referencing an object will return the object instance rather than its numeric ID. To access the raw serialized values, use `custom_field_data` instead.
* The `NetBoxModelCSVForm` class has been renamed to `NetBoxModelImportForm`. Backward compatability with the previous name has been retained for this release, but will be dropped in NetBox v3.5.
### New Features ### New Features

View File

@ -1,19 +1,19 @@
from circuits.choices import CircuitStatusChoices from circuits.choices import CircuitStatusChoices
from circuits.models import * from circuits.models import *
from django.utils.translation import gettext as _ from django.utils.translation import gettext as _
from netbox.forms import NetBoxModelCSVForm from netbox.forms import NetBoxModelImportForm
from tenancy.models import Tenant from tenancy.models import Tenant
from utilities.forms import CSVChoiceField, CSVModelChoiceField, SlugField from utilities.forms import CSVChoiceField, CSVModelChoiceField, SlugField
__all__ = ( __all__ = (
'CircuitCSVForm', 'CircuitImportForm',
'CircuitTypeCSVForm', 'CircuitTypeImportForm',
'ProviderCSVForm', 'ProviderImportForm',
'ProviderNetworkCSVForm', 'ProviderNetworkImportForm',
) )
class ProviderCSVForm(NetBoxModelCSVForm): class ProviderImportForm(NetBoxModelImportForm):
slug = SlugField() slug = SlugField()
class Meta: class Meta:
@ -23,7 +23,7 @@ class ProviderCSVForm(NetBoxModelCSVForm):
) )
class ProviderNetworkCSVForm(NetBoxModelCSVForm): class ProviderNetworkImportForm(NetBoxModelImportForm):
provider = CSVModelChoiceField( provider = CSVModelChoiceField(
queryset=Provider.objects.all(), queryset=Provider.objects.all(),
to_field_name='name', to_field_name='name',
@ -37,7 +37,7 @@ class ProviderNetworkCSVForm(NetBoxModelCSVForm):
] ]
class CircuitTypeCSVForm(NetBoxModelCSVForm): class CircuitTypeImportForm(NetBoxModelImportForm):
slug = SlugField() slug = SlugField()
class Meta: class Meta:
@ -48,7 +48,7 @@ class CircuitTypeCSVForm(NetBoxModelCSVForm):
} }
class CircuitCSVForm(NetBoxModelCSVForm): class CircuitImportForm(NetBoxModelImportForm):
provider = CSVModelChoiceField( provider = CSVModelChoiceField(
queryset=Provider.objects.all(), queryset=Provider.objects.all(),
to_field_name='name', to_field_name='name',

View File

@ -57,7 +57,7 @@ class ProviderDeleteView(generic.ObjectDeleteView):
class ProviderBulkImportView(generic.BulkImportView): class ProviderBulkImportView(generic.BulkImportView):
queryset = Provider.objects.all() queryset = Provider.objects.all()
model_form = forms.ProviderCSVForm model_form = forms.ProviderImportForm
table = tables.ProviderTable table = tables.ProviderTable
@ -122,7 +122,7 @@ class ProviderNetworkDeleteView(generic.ObjectDeleteView):
class ProviderNetworkBulkImportView(generic.BulkImportView): class ProviderNetworkBulkImportView(generic.BulkImportView):
queryset = ProviderNetwork.objects.all() queryset = ProviderNetwork.objects.all()
model_form = forms.ProviderNetworkCSVForm model_form = forms.ProviderNetworkImportForm
table = tables.ProviderNetworkTable table = tables.ProviderNetworkTable
@ -179,7 +179,7 @@ class CircuitTypeDeleteView(generic.ObjectDeleteView):
class CircuitTypeBulkImportView(generic.BulkImportView): class CircuitTypeBulkImportView(generic.BulkImportView):
queryset = CircuitType.objects.all() queryset = CircuitType.objects.all()
model_form = forms.CircuitTypeCSVForm model_form = forms.CircuitTypeImportForm
table = tables.CircuitTypeTable table = tables.CircuitTypeTable
@ -231,7 +231,7 @@ class CircuitDeleteView(generic.ObjectDeleteView):
class CircuitBulkImportView(generic.BulkImportView): class CircuitBulkImportView(generic.BulkImportView):
queryset = Circuit.objects.all() queryset = Circuit.objects.all()
model_form = forms.CircuitCSVForm model_form = forms.CircuitImportForm
table = tables.CircuitTable table = tables.CircuitTable

View File

@ -9,48 +9,48 @@ from dcim.choices import *
from dcim.constants import * from dcim.constants import *
from dcim.models import * from dcim.models import *
from ipam.models import VRF from ipam.models import VRF
from netbox.forms import NetBoxModelCSVForm from netbox.forms import NetBoxModelImportForm
from tenancy.models import Tenant from tenancy.models import Tenant
from utilities.forms import CSVChoiceField, CSVContentTypeField, CSVModelChoiceField, CSVTypedChoiceField, SlugField from utilities.forms import CSVChoiceField, CSVContentTypeField, CSVModelChoiceField, CSVTypedChoiceField, SlugField
from virtualization.models import Cluster from virtualization.models import Cluster
from wireless.choices import WirelessRoleChoices from wireless.choices import WirelessRoleChoices
__all__ = ( __all__ = (
'CableCSVForm', 'CableImportForm',
'ChildDeviceCSVForm', 'ChildDeviceImportForm',
'ConsolePortCSVForm', 'ConsolePortImportForm',
'ConsoleServerPortCSVForm', 'ConsoleServerPortImportForm',
'DeviceBayCSVForm', 'DeviceBayImportForm',
'DeviceCSVForm', 'DeviceImportForm',
'DeviceRoleCSVForm', 'DeviceRoleImportForm',
'DeviceTypeImportForm', 'DeviceTypeImportForm',
'FrontPortCSVForm', 'FrontPortImportForm',
'InterfaceCSVForm', 'InterfaceImportForm',
'InventoryItemCSVForm', 'InventoryItemImportForm',
'InventoryItemRoleCSVForm', 'InventoryItemRoleImportForm',
'LocationCSVForm', 'LocationImportForm',
'ManufacturerCSVForm', 'ManufacturerImportForm',
'ModuleCSVForm', 'ModuleImportForm',
'ModuleBayCSVForm', 'ModuleBayImportForm',
'ModuleTypeImportForm', 'ModuleTypeImportForm',
'PlatformCSVForm', 'PlatformImportForm',
'PowerFeedCSVForm', 'PowerFeedImportForm',
'PowerOutletCSVForm', 'PowerOutletImportForm',
'PowerPanelCSVForm', 'PowerPanelImportForm',
'PowerPortCSVForm', 'PowerPortImportForm',
'RackCSVForm', 'RackImportForm',
'RackReservationCSVForm', 'RackReservationImportForm',
'RackRoleCSVForm', 'RackRoleImportForm',
'RearPortCSVForm', 'RearPortImportForm',
'RegionCSVForm', 'RegionImportForm',
'SiteCSVForm', 'SiteImportForm',
'SiteGroupCSVForm', 'SiteGroupImportForm',
'VirtualChassisCSVForm', 'VirtualChassisImportForm',
'VirtualDeviceContextCSVForm' 'VirtualDeviceContextImportForm'
) )
class RegionCSVForm(NetBoxModelCSVForm): class RegionImportForm(NetBoxModelImportForm):
parent = CSVModelChoiceField( parent = CSVModelChoiceField(
queryset=Region.objects.all(), queryset=Region.objects.all(),
required=False, required=False,
@ -63,7 +63,7 @@ class RegionCSVForm(NetBoxModelCSVForm):
fields = ('name', 'slug', 'parent', 'description', 'tags') fields = ('name', 'slug', 'parent', 'description', 'tags')
class SiteGroupCSVForm(NetBoxModelCSVForm): class SiteGroupImportForm(NetBoxModelImportForm):
parent = CSVModelChoiceField( parent = CSVModelChoiceField(
queryset=SiteGroup.objects.all(), queryset=SiteGroup.objects.all(),
required=False, required=False,
@ -76,7 +76,7 @@ class SiteGroupCSVForm(NetBoxModelCSVForm):
fields = ('name', 'slug', 'parent', 'description') fields = ('name', 'slug', 'parent', 'description')
class SiteCSVForm(NetBoxModelCSVForm): class SiteImportForm(NetBoxModelImportForm):
status = CSVChoiceField( status = CSVChoiceField(
choices=SiteStatusChoices, choices=SiteStatusChoices,
help_text=_('Operational status') help_text=_('Operational status')
@ -113,7 +113,7 @@ class SiteCSVForm(NetBoxModelCSVForm):
} }
class LocationCSVForm(NetBoxModelCSVForm): class LocationImportForm(NetBoxModelImportForm):
site = CSVModelChoiceField( site = CSVModelChoiceField(
queryset=Site.objects.all(), queryset=Site.objects.all(),
to_field_name='name', to_field_name='name',
@ -144,7 +144,7 @@ class LocationCSVForm(NetBoxModelCSVForm):
fields = ('site', 'parent', 'name', 'slug', 'status', 'tenant', 'description', 'tags') fields = ('site', 'parent', 'name', 'slug', 'status', 'tenant', 'description', 'tags')
class RackRoleCSVForm(NetBoxModelCSVForm): class RackRoleImportForm(NetBoxModelImportForm):
slug = SlugField() slug = SlugField()
class Meta: class Meta:
@ -155,7 +155,7 @@ class RackRoleCSVForm(NetBoxModelCSVForm):
} }
class RackCSVForm(NetBoxModelCSVForm): class RackImportForm(NetBoxModelImportForm):
site = CSVModelChoiceField( site = CSVModelChoiceField(
queryset=Site.objects.all(), queryset=Site.objects.all(),
to_field_name='name' to_field_name='name'
@ -214,7 +214,7 @@ class RackCSVForm(NetBoxModelCSVForm):
self.fields['location'].queryset = self.fields['location'].queryset.filter(**params) self.fields['location'].queryset = self.fields['location'].queryset.filter(**params)
class RackReservationCSVForm(NetBoxModelCSVForm): class RackReservationImportForm(NetBoxModelImportForm):
site = CSVModelChoiceField( site = CSVModelChoiceField(
queryset=Site.objects.all(), queryset=Site.objects.all(),
to_field_name='name', to_field_name='name',
@ -264,14 +264,14 @@ class RackReservationCSVForm(NetBoxModelCSVForm):
self.fields['rack'].queryset = self.fields['rack'].queryset.filter(**params) self.fields['rack'].queryset = self.fields['rack'].queryset.filter(**params)
class ManufacturerCSVForm(NetBoxModelCSVForm): class ManufacturerImportForm(NetBoxModelImportForm):
class Meta: class Meta:
model = Manufacturer model = Manufacturer
fields = ('name', 'slug', 'description', 'tags') fields = ('name', 'slug', 'description', 'tags')
class DeviceTypeImportForm(NetBoxModelCSVForm): class DeviceTypeImportForm(NetBoxModelImportForm):
manufacturer = forms.ModelChoiceField( manufacturer = forms.ModelChoiceField(
queryset=Manufacturer.objects.all(), queryset=Manufacturer.objects.all(),
to_field_name='name' to_field_name='name'
@ -285,7 +285,7 @@ class DeviceTypeImportForm(NetBoxModelCSVForm):
] ]
class ModuleTypeImportForm(NetBoxModelCSVForm): class ModuleTypeImportForm(NetBoxModelImportForm):
manufacturer = forms.ModelChoiceField( manufacturer = forms.ModelChoiceField(
queryset=Manufacturer.objects.all(), queryset=Manufacturer.objects.all(),
to_field_name='name' to_field_name='name'
@ -296,7 +296,7 @@ class ModuleTypeImportForm(NetBoxModelCSVForm):
fields = ['manufacturer', 'model', 'part_number', 'description', 'comments'] fields = ['manufacturer', 'model', 'part_number', 'description', 'comments']
class DeviceRoleCSVForm(NetBoxModelCSVForm): class DeviceRoleImportForm(NetBoxModelImportForm):
slug = SlugField() slug = SlugField()
class Meta: class Meta:
@ -307,7 +307,7 @@ class DeviceRoleCSVForm(NetBoxModelCSVForm):
} }
class PlatformCSVForm(NetBoxModelCSVForm): class PlatformImportForm(NetBoxModelImportForm):
slug = SlugField() slug = SlugField()
manufacturer = CSVModelChoiceField( manufacturer = CSVModelChoiceField(
queryset=Manufacturer.objects.all(), queryset=Manufacturer.objects.all(),
@ -321,7 +321,7 @@ class PlatformCSVForm(NetBoxModelCSVForm):
fields = ('name', 'slug', 'manufacturer', 'napalm_driver', 'napalm_args', 'description', 'tags') fields = ('name', 'slug', 'manufacturer', 'napalm_driver', 'napalm_args', 'description', 'tags')
class BaseDeviceCSVForm(NetBoxModelCSVForm): class BaseDeviceImportForm(NetBoxModelImportForm):
device_role = CSVModelChoiceField( device_role = CSVModelChoiceField(
queryset=DeviceRole.objects.all(), queryset=DeviceRole.objects.all(),
to_field_name='name', to_field_name='name',
@ -384,7 +384,7 @@ class BaseDeviceCSVForm(NetBoxModelCSVForm):
self.fields['device_type'].queryset = self.fields['device_type'].queryset.filter(**params) self.fields['device_type'].queryset = self.fields['device_type'].queryset.filter(**params)
class DeviceCSVForm(BaseDeviceCSVForm): class DeviceImportForm(BaseDeviceImportForm):
site = CSVModelChoiceField( site = CSVModelChoiceField(
queryset=Site.objects.all(), queryset=Site.objects.all(),
to_field_name='name', to_field_name='name',
@ -413,7 +413,7 @@ class DeviceCSVForm(BaseDeviceCSVForm):
help_text=_('Airflow direction') help_text=_('Airflow direction')
) )
class Meta(BaseDeviceCSVForm.Meta): class Meta(BaseDeviceImportForm.Meta):
fields = [ fields = [
'name', 'device_role', 'tenant', 'manufacturer', 'device_type', 'platform', 'serial', 'asset_tag', 'status', 'name', 'device_role', 'tenant', 'manufacturer', 'device_type', 'platform', 'serial', 'asset_tag', 'status',
'site', 'location', 'rack', 'position', 'face', 'airflow', 'virtual_chassis', 'vc_position', 'vc_priority', 'site', 'location', 'rack', 'position', 'face', 'airflow', 'virtual_chassis', 'vc_position', 'vc_priority',
@ -437,7 +437,7 @@ class DeviceCSVForm(BaseDeviceCSVForm):
self.fields['rack'].queryset = self.fields['rack'].queryset.filter(**params) self.fields['rack'].queryset = self.fields['rack'].queryset.filter(**params)
class ModuleCSVForm(NetBoxModelCSVForm): class ModuleImportForm(NetBoxModelImportForm):
device = CSVModelChoiceField( device = CSVModelChoiceField(
queryset=Device.objects.all(), queryset=Device.objects.all(),
to_field_name='name' to_field_name='name'
@ -466,7 +466,7 @@ class ModuleCSVForm(NetBoxModelCSVForm):
self.fields['module_bay'].queryset = self.fields['module_bay'].queryset.filter(**params) self.fields['module_bay'].queryset = self.fields['module_bay'].queryset.filter(**params)
class ChildDeviceCSVForm(BaseDeviceCSVForm): class ChildDeviceImportForm(BaseDeviceImportForm):
parent = CSVModelChoiceField( parent = CSVModelChoiceField(
queryset=Device.objects.all(), queryset=Device.objects.all(),
to_field_name='name', to_field_name='name',
@ -478,7 +478,7 @@ class ChildDeviceCSVForm(BaseDeviceCSVForm):
help_text=_('Device bay in which this device is installed') help_text=_('Device bay in which this device is installed')
) )
class Meta(BaseDeviceCSVForm.Meta): class Meta(BaseDeviceImportForm.Meta):
fields = [ fields = [
'name', 'device_role', 'tenant', 'manufacturer', 'device_type', 'platform', 'serial', 'asset_tag', 'status', 'name', 'device_role', 'tenant', 'manufacturer', 'device_type', 'platform', 'serial', 'asset_tag', 'status',
'parent', 'device_bay', 'virtual_chassis', 'vc_position', 'vc_priority', 'cluster', 'comments', 'tags' 'parent', 'device_bay', 'virtual_chassis', 'vc_position', 'vc_priority', 'cluster', 'comments', 'tags'
@ -512,7 +512,7 @@ class ChildDeviceCSVForm(BaseDeviceCSVForm):
# Device components # Device components
# #
class ConsolePortCSVForm(NetBoxModelCSVForm): class ConsolePortImportForm(NetBoxModelImportForm):
device = CSVModelChoiceField( device = CSVModelChoiceField(
queryset=Device.objects.all(), queryset=Device.objects.all(),
to_field_name='name' to_field_name='name'
@ -535,7 +535,7 @@ class ConsolePortCSVForm(NetBoxModelCSVForm):
fields = ('device', 'name', 'label', 'type', 'speed', 'mark_connected', 'description', 'tags') fields = ('device', 'name', 'label', 'type', 'speed', 'mark_connected', 'description', 'tags')
class ConsoleServerPortCSVForm(NetBoxModelCSVForm): class ConsoleServerPortImportForm(NetBoxModelImportForm):
device = CSVModelChoiceField( device = CSVModelChoiceField(
queryset=Device.objects.all(), queryset=Device.objects.all(),
to_field_name='name' to_field_name='name'
@ -558,7 +558,7 @@ class ConsoleServerPortCSVForm(NetBoxModelCSVForm):
fields = ('device', 'name', 'label', 'type', 'speed', 'mark_connected', 'description', 'tags') fields = ('device', 'name', 'label', 'type', 'speed', 'mark_connected', 'description', 'tags')
class PowerPortCSVForm(NetBoxModelCSVForm): class PowerPortImportForm(NetBoxModelImportForm):
device = CSVModelChoiceField( device = CSVModelChoiceField(
queryset=Device.objects.all(), queryset=Device.objects.all(),
to_field_name='name' to_field_name='name'
@ -576,7 +576,7 @@ class PowerPortCSVForm(NetBoxModelCSVForm):
) )
class PowerOutletCSVForm(NetBoxModelCSVForm): class PowerOutletImportForm(NetBoxModelImportForm):
device = CSVModelChoiceField( device = CSVModelChoiceField(
queryset=Device.objects.all(), queryset=Device.objects.all(),
to_field_name='name' to_field_name='name'
@ -625,7 +625,7 @@ class PowerOutletCSVForm(NetBoxModelCSVForm):
self.fields['power_port'].queryset = PowerPort.objects.none() self.fields['power_port'].queryset = PowerPort.objects.none()
class InterfaceCSVForm(NetBoxModelCSVForm): class InterfaceImportForm(NetBoxModelImportForm):
device = CSVModelChoiceField( device = CSVModelChoiceField(
queryset=Device.objects.all(), queryset=Device.objects.all(),
to_field_name='name' to_field_name='name'
@ -712,7 +712,7 @@ class InterfaceCSVForm(NetBoxModelCSVForm):
return self.cleaned_data['enabled'] return self.cleaned_data['enabled']
class FrontPortCSVForm(NetBoxModelCSVForm): class FrontPortImportForm(NetBoxModelImportForm):
device = CSVModelChoiceField( device = CSVModelChoiceField(
queryset=Device.objects.all(), queryset=Device.objects.all(),
to_field_name='name' to_field_name='name'
@ -760,7 +760,7 @@ class FrontPortCSVForm(NetBoxModelCSVForm):
self.fields['rear_port'].queryset = RearPort.objects.none() self.fields['rear_port'].queryset = RearPort.objects.none()
class RearPortCSVForm(NetBoxModelCSVForm): class RearPortImportForm(NetBoxModelImportForm):
device = CSVModelChoiceField( device = CSVModelChoiceField(
queryset=Device.objects.all(), queryset=Device.objects.all(),
to_field_name='name' to_field_name='name'
@ -778,7 +778,7 @@ class RearPortCSVForm(NetBoxModelCSVForm):
} }
class ModuleBayCSVForm(NetBoxModelCSVForm): class ModuleBayImportForm(NetBoxModelImportForm):
device = CSVModelChoiceField( device = CSVModelChoiceField(
queryset=Device.objects.all(), queryset=Device.objects.all(),
to_field_name='name' to_field_name='name'
@ -789,7 +789,7 @@ class ModuleBayCSVForm(NetBoxModelCSVForm):
fields = ('device', 'name', 'label', 'position', 'description', 'tags') fields = ('device', 'name', 'label', 'position', 'description', 'tags')
class DeviceBayCSVForm(NetBoxModelCSVForm): class DeviceBayImportForm(NetBoxModelImportForm):
device = CSVModelChoiceField( device = CSVModelChoiceField(
queryset=Device.objects.all(), queryset=Device.objects.all(),
to_field_name='name' to_field_name='name'
@ -835,7 +835,7 @@ class DeviceBayCSVForm(NetBoxModelCSVForm):
self.fields['installed_device'].queryset = Interface.objects.none() self.fields['installed_device'].queryset = Interface.objects.none()
class InventoryItemCSVForm(NetBoxModelCSVForm): class InventoryItemImportForm(NetBoxModelImportForm):
device = CSVModelChoiceField( device = CSVModelChoiceField(
queryset=Device.objects.all(), queryset=Device.objects.all(),
to_field_name='name' to_field_name='name'
@ -884,7 +884,7 @@ class InventoryItemCSVForm(NetBoxModelCSVForm):
# Device component roles # Device component roles
# #
class InventoryItemRoleCSVForm(NetBoxModelCSVForm): class InventoryItemRoleImportForm(NetBoxModelImportForm):
slug = SlugField() slug = SlugField()
class Meta: class Meta:
@ -899,7 +899,7 @@ class InventoryItemRoleCSVForm(NetBoxModelCSVForm):
# Cables # Cables
# #
class CableCSVForm(NetBoxModelCSVForm): class CableImportForm(NetBoxModelImportForm):
# Termination A # Termination A
side_a_device = CSVModelChoiceField( side_a_device = CSVModelChoiceField(
queryset=Device.objects.all(), queryset=Device.objects.all(),
@ -1004,7 +1004,7 @@ class CableCSVForm(NetBoxModelCSVForm):
# Virtual chassis # Virtual chassis
# #
class VirtualChassisCSVForm(NetBoxModelCSVForm): class VirtualChassisImportForm(NetBoxModelImportForm):
master = CSVModelChoiceField( master = CSVModelChoiceField(
queryset=Device.objects.all(), queryset=Device.objects.all(),
to_field_name='name', to_field_name='name',
@ -1021,7 +1021,7 @@ class VirtualChassisCSVForm(NetBoxModelCSVForm):
# Power # Power
# #
class PowerPanelCSVForm(NetBoxModelCSVForm): class PowerPanelImportForm(NetBoxModelImportForm):
site = CSVModelChoiceField( site = CSVModelChoiceField(
queryset=Site.objects.all(), queryset=Site.objects.all(),
to_field_name='name', to_field_name='name',
@ -1047,7 +1047,7 @@ class PowerPanelCSVForm(NetBoxModelCSVForm):
self.fields['location'].queryset = self.fields['location'].queryset.filter(**params) self.fields['location'].queryset = self.fields['location'].queryset.filter(**params)
class PowerFeedCSVForm(NetBoxModelCSVForm): class PowerFeedImportForm(NetBoxModelImportForm):
site = CSVModelChoiceField( site = CSVModelChoiceField(
queryset=Site.objects.all(), queryset=Site.objects.all(),
to_field_name='name', to_field_name='name',
@ -1115,7 +1115,7 @@ class PowerFeedCSVForm(NetBoxModelCSVForm):
self.fields['rack'].queryset = self.fields['rack'].queryset.filter(**params) self.fields['rack'].queryset = self.fields['rack'].queryset.filter(**params)
class VirtualDeviceContextCSVForm(NetBoxModelCSVForm): class VirtualDeviceContextImportForm(NetBoxModelImportForm):
device = CSVModelChoiceField( device = CSVModelChoiceField(
queryset=Device.objects.all(), queryset=Device.objects.all(),

View File

@ -248,7 +248,7 @@ class RegionDeleteView(generic.ObjectDeleteView):
class RegionBulkImportView(generic.BulkImportView): class RegionBulkImportView(generic.BulkImportView):
queryset = Region.objects.all() queryset = Region.objects.all()
model_form = forms.RegionCSVForm model_form = forms.RegionImportForm
table = tables.RegionTable table = tables.RegionTable
@ -336,7 +336,7 @@ class SiteGroupDeleteView(generic.ObjectDeleteView):
class SiteGroupBulkImportView(generic.BulkImportView): class SiteGroupBulkImportView(generic.BulkImportView):
queryset = SiteGroup.objects.all() queryset = SiteGroup.objects.all()
model_form = forms.SiteGroupCSVForm model_form = forms.SiteGroupImportForm
table = tables.SiteGroupTable table = tables.SiteGroupTable
@ -442,7 +442,7 @@ class SiteDeleteView(generic.ObjectDeleteView):
class SiteBulkImportView(generic.BulkImportView): class SiteBulkImportView(generic.BulkImportView):
queryset = Site.objects.all() queryset = Site.objects.all()
model_form = forms.SiteCSVForm model_form = forms.SiteImportForm
table = tables.SiteTable table = tables.SiteTable
@ -535,7 +535,7 @@ class LocationDeleteView(generic.ObjectDeleteView):
class LocationBulkImportView(generic.BulkImportView): class LocationBulkImportView(generic.BulkImportView):
queryset = Location.objects.all() queryset = Location.objects.all()
model_form = forms.LocationCSVForm model_form = forms.LocationImportForm
table = tables.LocationTable table = tables.LocationTable
@ -609,7 +609,7 @@ class RackRoleDeleteView(generic.ObjectDeleteView):
class RackRoleBulkImportView(generic.BulkImportView): class RackRoleBulkImportView(generic.BulkImportView):
queryset = RackRole.objects.all() queryset = RackRole.objects.all()
model_form = forms.RackRoleCSVForm model_form = forms.RackRoleImportForm
table = tables.RackRoleTable table = tables.RackRoleTable
@ -751,7 +751,7 @@ class RackDeleteView(generic.ObjectDeleteView):
class RackBulkImportView(generic.BulkImportView): class RackBulkImportView(generic.BulkImportView):
queryset = Rack.objects.all() queryset = Rack.objects.all()
model_form = forms.RackCSVForm model_form = forms.RackImportForm
table = tables.RackTable table = tables.RackTable
@ -804,7 +804,7 @@ class RackReservationDeleteView(generic.ObjectDeleteView):
class RackReservationImportView(generic.BulkImportView): class RackReservationImportView(generic.BulkImportView):
queryset = RackReservation.objects.all() queryset = RackReservation.objects.all()
model_form = forms.RackReservationCSVForm model_form = forms.RackReservationImportForm
table = tables.RackReservationTable table = tables.RackReservationTable
def save_object(self, obj_form, request): def save_object(self, obj_form, request):
@ -886,7 +886,7 @@ class ManufacturerDeleteView(generic.ObjectDeleteView):
class ManufacturerBulkImportView(generic.BulkImportView): class ManufacturerBulkImportView(generic.BulkImportView):
queryset = Manufacturer.objects.all() queryset = Manufacturer.objects.all()
model_form = forms.ManufacturerCSVForm model_form = forms.ManufacturerImportForm
table = tables.ManufacturerTable table = tables.ManufacturerTable
@ -1730,7 +1730,7 @@ class DeviceRoleDeleteView(generic.ObjectDeleteView):
class DeviceRoleBulkImportView(generic.BulkImportView): class DeviceRoleBulkImportView(generic.BulkImportView):
queryset = DeviceRole.objects.all() queryset = DeviceRole.objects.all()
model_form = forms.DeviceRoleCSVForm model_form = forms.DeviceRoleImportForm
table = tables.DeviceRoleTable table = tables.DeviceRoleTable
@ -1796,7 +1796,7 @@ class PlatformDeleteView(generic.ObjectDeleteView):
class PlatformBulkImportView(generic.BulkImportView): class PlatformBulkImportView(generic.BulkImportView):
queryset = Platform.objects.all() queryset = Platform.objects.all()
model_form = forms.PlatformCSVForm model_form = forms.PlatformImportForm
table = tables.PlatformTable table = tables.PlatformTable
@ -2020,14 +2020,14 @@ class DeviceConfigContextView(ObjectConfigContextView):
class DeviceBulkImportView(generic.BulkImportView): class DeviceBulkImportView(generic.BulkImportView):
queryset = Device.objects.all() queryset = Device.objects.all()
model_form = forms.DeviceCSVForm model_form = forms.DeviceImportForm
table = tables.DeviceImportTable table = tables.DeviceImportTable
template_name = 'dcim/device_import.html' template_name = 'dcim/device_import.html'
class ChildDeviceBulkImportView(generic.BulkImportView): class ChildDeviceBulkImportView(generic.BulkImportView):
queryset = Device.objects.all() queryset = Device.objects.all()
model_form = forms.ChildDeviceCSVForm model_form = forms.ChildDeviceImportForm
table = tables.DeviceImportTable table = tables.DeviceImportTable
template_name = 'dcim/device_import_child.html' template_name = 'dcim/device_import_child.html'
@ -2151,7 +2151,7 @@ class ModuleDeleteView(generic.ObjectDeleteView):
class ModuleBulkImportView(generic.BulkImportView): class ModuleBulkImportView(generic.BulkImportView):
queryset = Module.objects.all() queryset = Module.objects.all()
model_form = forms.ModuleCSVForm model_form = forms.ModuleImportForm
table = tables.ModuleTable table = tables.ModuleTable
@ -2204,7 +2204,7 @@ class ConsolePortDeleteView(generic.ObjectDeleteView):
class ConsolePortBulkImportView(generic.BulkImportView): class ConsolePortBulkImportView(generic.BulkImportView):
queryset = ConsolePort.objects.all() queryset = ConsolePort.objects.all()
model_form = forms.ConsolePortCSVForm model_form = forms.ConsolePortImportForm
table = tables.ConsolePortTable table = tables.ConsolePortTable
@ -2269,7 +2269,7 @@ class ConsoleServerPortDeleteView(generic.ObjectDeleteView):
class ConsoleServerPortBulkImportView(generic.BulkImportView): class ConsoleServerPortBulkImportView(generic.BulkImportView):
queryset = ConsoleServerPort.objects.all() queryset = ConsoleServerPort.objects.all()
model_form = forms.ConsoleServerPortCSVForm model_form = forms.ConsoleServerPortImportForm
table = tables.ConsoleServerPortTable table = tables.ConsoleServerPortTable
@ -2334,7 +2334,7 @@ class PowerPortDeleteView(generic.ObjectDeleteView):
class PowerPortBulkImportView(generic.BulkImportView): class PowerPortBulkImportView(generic.BulkImportView):
queryset = PowerPort.objects.all() queryset = PowerPort.objects.all()
model_form = forms.PowerPortCSVForm model_form = forms.PowerPortImportForm
table = tables.PowerPortTable table = tables.PowerPortTable
@ -2399,7 +2399,7 @@ class PowerOutletDeleteView(generic.ObjectDeleteView):
class PowerOutletBulkImportView(generic.BulkImportView): class PowerOutletBulkImportView(generic.BulkImportView):
queryset = PowerOutlet.objects.all() queryset = PowerOutlet.objects.all()
model_form = forms.PowerOutletCSVForm model_form = forms.PowerOutletImportForm
table = tables.PowerOutletTable table = tables.PowerOutletTable
@ -2517,7 +2517,7 @@ class InterfaceDeleteView(generic.ObjectDeleteView):
class InterfaceBulkImportView(generic.BulkImportView): class InterfaceBulkImportView(generic.BulkImportView):
queryset = Interface.objects.all() queryset = Interface.objects.all()
model_form = forms.InterfaceCSVForm model_form = forms.InterfaceImportForm
table = tables.InterfaceTable table = tables.InterfaceTable
@ -2582,7 +2582,7 @@ class FrontPortDeleteView(generic.ObjectDeleteView):
class FrontPortBulkImportView(generic.BulkImportView): class FrontPortBulkImportView(generic.BulkImportView):
queryset = FrontPort.objects.all() queryset = FrontPort.objects.all()
model_form = forms.FrontPortCSVForm model_form = forms.FrontPortImportForm
table = tables.FrontPortTable table = tables.FrontPortTable
@ -2647,7 +2647,7 @@ class RearPortDeleteView(generic.ObjectDeleteView):
class RearPortBulkImportView(generic.BulkImportView): class RearPortBulkImportView(generic.BulkImportView):
queryset = RearPort.objects.all() queryset = RearPort.objects.all()
model_form = forms.RearPortCSVForm model_form = forms.RearPortImportForm
table = tables.RearPortTable table = tables.RearPortTable
@ -2712,7 +2712,7 @@ class ModuleBayDeleteView(generic.ObjectDeleteView):
class ModuleBayBulkImportView(generic.BulkImportView): class ModuleBayBulkImportView(generic.BulkImportView):
queryset = ModuleBay.objects.all() queryset = ModuleBay.objects.all()
model_form = forms.ModuleBayCSVForm model_form = forms.ModuleBayImportForm
table = tables.ModuleBayTable table = tables.ModuleBayTable
@ -2838,7 +2838,7 @@ class DeviceBayDepopulateView(generic.ObjectEditView):
class DeviceBayBulkImportView(generic.BulkImportView): class DeviceBayBulkImportView(generic.BulkImportView):
queryset = DeviceBay.objects.all() queryset = DeviceBay.objects.all()
model_form = forms.DeviceBayCSVForm model_form = forms.DeviceBayImportForm
table = tables.DeviceBayTable table = tables.DeviceBayTable
@ -2906,7 +2906,7 @@ class InventoryItemDeleteView(generic.ObjectDeleteView):
class InventoryItemBulkImportView(generic.BulkImportView): class InventoryItemBulkImportView(generic.BulkImportView):
queryset = InventoryItem.objects.all() queryset = InventoryItem.objects.all()
model_form = forms.InventoryItemCSVForm model_form = forms.InventoryItemImportForm
table = tables.InventoryItemTable table = tables.InventoryItemTable
@ -2963,7 +2963,7 @@ class InventoryItemRoleDeleteView(generic.ObjectDeleteView):
class InventoryItemRoleBulkImportView(generic.BulkImportView): class InventoryItemRoleBulkImportView(generic.BulkImportView):
queryset = InventoryItemRole.objects.all() queryset = InventoryItemRole.objects.all()
model_form = forms.InventoryItemRoleCSVForm model_form = forms.InventoryItemRoleImportForm
table = tables.InventoryItemRoleTable table = tables.InventoryItemRoleTable
@ -3158,7 +3158,7 @@ class CableDeleteView(generic.ObjectDeleteView):
class CableBulkImportView(generic.BulkImportView): class CableBulkImportView(generic.BulkImportView):
queryset = Cable.objects.all() queryset = Cable.objects.all()
model_form = forms.CableCSVForm model_form = forms.CableImportForm
table = tables.CableTable table = tables.CableTable
@ -3441,7 +3441,7 @@ class VirtualChassisRemoveMemberView(ObjectPermissionRequiredMixin, GetReturnURL
class VirtualChassisBulkImportView(generic.BulkImportView): class VirtualChassisBulkImportView(generic.BulkImportView):
queryset = VirtualChassis.objects.all() queryset = VirtualChassis.objects.all()
model_form = forms.VirtualChassisCSVForm model_form = forms.VirtualChassisImportForm
table = tables.VirtualChassisTable table = tables.VirtualChassisTable
@ -3503,7 +3503,7 @@ class PowerPanelDeleteView(generic.ObjectDeleteView):
class PowerPanelBulkImportView(generic.BulkImportView): class PowerPanelBulkImportView(generic.BulkImportView):
queryset = PowerPanel.objects.all() queryset = PowerPanel.objects.all()
model_form = forms.PowerPanelCSVForm model_form = forms.PowerPanelImportForm
table = tables.PowerPanelTable table = tables.PowerPanelTable
@ -3551,7 +3551,7 @@ class PowerFeedDeleteView(generic.ObjectDeleteView):
class PowerFeedBulkImportView(generic.BulkImportView): class PowerFeedBulkImportView(generic.BulkImportView):
queryset = PowerFeed.objects.all() queryset = PowerFeed.objects.all()
model_form = forms.PowerFeedCSVForm model_form = forms.PowerFeedImportForm
table = tables.PowerFeedTable table = tables.PowerFeedTable
@ -3611,7 +3611,7 @@ class VirtualDeviceContextDeleteView(generic.ObjectDeleteView):
class VirtualDeviceContextBulkImportView(generic.BulkImportView): class VirtualDeviceContextBulkImportView(generic.BulkImportView):
queryset = VirtualDeviceContext.objects.all() queryset = VirtualDeviceContext.objects.all()
model_form = forms.VirtualDeviceContextCSVForm model_form = forms.VirtualDeviceContextImportForm
table = tables.VirtualDeviceContextTable table = tables.VirtualDeviceContextTable

View File

@ -10,16 +10,16 @@ from extras.utils import FeatureQuery
from utilities.forms import CSVChoiceField, CSVContentTypeField, CSVModelForm, CSVMultipleContentTypeField, SlugField from utilities.forms import CSVChoiceField, CSVContentTypeField, CSVModelForm, CSVMultipleContentTypeField, SlugField
__all__ = ( __all__ = (
'CustomFieldCSVForm', 'CustomFieldImportForm',
'CustomLinkCSVForm', 'CustomLinkImportForm',
'ExportTemplateCSVForm', 'ExportTemplateImportForm',
'SavedFilterCSVForm', 'SavedFilterImportForm',
'TagCSVForm', 'TagImportForm',
'WebhookCSVForm', 'WebhookImportForm',
) )
class CustomFieldCSVForm(CSVModelForm): class CustomFieldImportForm(CSVModelForm):
content_types = CSVMultipleContentTypeField( content_types = CSVMultipleContentTypeField(
queryset=ContentType.objects.all(), queryset=ContentType.objects.all(),
limit_choices_to=FeatureQuery('custom_fields'), limit_choices_to=FeatureQuery('custom_fields'),
@ -54,7 +54,7 @@ class CustomFieldCSVForm(CSVModelForm):
) )
class CustomLinkCSVForm(CSVModelForm): class CustomLinkImportForm(CSVModelForm):
content_types = CSVMultipleContentTypeField( content_types = CSVMultipleContentTypeField(
queryset=ContentType.objects.all(), queryset=ContentType.objects.all(),
limit_choices_to=FeatureQuery('custom_links'), limit_choices_to=FeatureQuery('custom_links'),
@ -69,7 +69,7 @@ class CustomLinkCSVForm(CSVModelForm):
) )
class ExportTemplateCSVForm(CSVModelForm): class ExportTemplateImportForm(CSVModelForm):
content_types = CSVMultipleContentTypeField( content_types = CSVMultipleContentTypeField(
queryset=ContentType.objects.all(), queryset=ContentType.objects.all(),
limit_choices_to=FeatureQuery('export_templates'), limit_choices_to=FeatureQuery('export_templates'),
@ -83,7 +83,7 @@ class ExportTemplateCSVForm(CSVModelForm):
) )
class SavedFilterCSVForm(CSVModelForm): class SavedFilterImportForm(CSVModelForm):
content_types = CSVMultipleContentTypeField( content_types = CSVMultipleContentTypeField(
queryset=ContentType.objects.all(), queryset=ContentType.objects.all(),
help_text=_("One or more assigned object types") help_text=_("One or more assigned object types")
@ -96,7 +96,7 @@ class SavedFilterCSVForm(CSVModelForm):
) )
class WebhookCSVForm(CSVModelForm): class WebhookImportForm(CSVModelForm):
content_types = CSVMultipleContentTypeField( content_types = CSVMultipleContentTypeField(
queryset=ContentType.objects.all(), queryset=ContentType.objects.all(),
limit_choices_to=FeatureQuery('webhooks'), limit_choices_to=FeatureQuery('webhooks'),
@ -112,7 +112,7 @@ class WebhookCSVForm(CSVModelForm):
) )
class TagCSVForm(CSVModelForm): class TagImportForm(CSVModelForm):
slug = SlugField() slug = SlugField()
class Meta: class Meta:

View File

@ -6,7 +6,7 @@ from django.urls import reverse
from rest_framework import status from rest_framework import status
from dcim.filtersets import SiteFilterSet from dcim.filtersets import SiteFilterSet
from dcim.forms import SiteCSVForm from dcim.forms import SiteImportForm
from dcim.models import Manufacturer, Rack, Site from dcim.models import Manufacturer, Rack, Site
from extras.choices import * from extras.choices import *
from extras.models import CustomField from extras.models import CustomField
@ -983,7 +983,7 @@ class CustomFieldImportTest(TestCase):
'slug': 'site-1', 'slug': 'site-1',
} }
form = SiteCSVForm(data=form_data) form = SiteImportForm(data=form_data)
self.assertFalse(form.is_valid()) self.assertFalse(form.is_valid())
self.assertIn('cf_text', form.errors) self.assertIn('cf_text', form.errors)
@ -997,7 +997,7 @@ class CustomFieldImportTest(TestCase):
'cf_select': 'Choice X' 'cf_select': 'Choice X'
} }
form = SiteCSVForm(data=form_data) form = SiteImportForm(data=form_data)
self.assertFalse(form.is_valid()) self.assertFalse(form.is_valid())
self.assertIn('cf_select', form.errors) self.assertIn('cf_select', form.errors)

View File

@ -49,7 +49,7 @@ class CustomFieldDeleteView(generic.ObjectDeleteView):
class CustomFieldBulkImportView(generic.BulkImportView): class CustomFieldBulkImportView(generic.BulkImportView):
queryset = CustomField.objects.all() queryset = CustomField.objects.all()
model_form = forms.CustomFieldCSVForm model_form = forms.CustomFieldImportForm
table = tables.CustomFieldTable table = tables.CustomFieldTable
@ -95,7 +95,7 @@ class CustomLinkDeleteView(generic.ObjectDeleteView):
class CustomLinkBulkImportView(generic.BulkImportView): class CustomLinkBulkImportView(generic.BulkImportView):
queryset = CustomLink.objects.all() queryset = CustomLink.objects.all()
model_form = forms.CustomLinkCSVForm model_form = forms.CustomLinkImportForm
table = tables.CustomLinkTable table = tables.CustomLinkTable
@ -141,7 +141,7 @@ class ExportTemplateDeleteView(generic.ObjectDeleteView):
class ExportTemplateBulkImportView(generic.BulkImportView): class ExportTemplateBulkImportView(generic.BulkImportView):
queryset = ExportTemplate.objects.all() queryset = ExportTemplate.objects.all()
model_form = forms.ExportTemplateCSVForm model_form = forms.ExportTemplateImportForm
table = tables.ExportTemplateTable table = tables.ExportTemplateTable
@ -209,7 +209,7 @@ 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.SavedFilterCSVForm model_form = forms.SavedFilterImportForm
table = tables.SavedFilterTable table = tables.SavedFilterTable
@ -255,7 +255,7 @@ class WebhookDeleteView(generic.ObjectDeleteView):
class WebhookBulkImportView(generic.BulkImportView): class WebhookBulkImportView(generic.BulkImportView):
queryset = Webhook.objects.all() queryset = Webhook.objects.all()
model_form = forms.WebhookCSVForm model_form = forms.WebhookImportForm
table = tables.WebhookTable table = tables.WebhookTable
@ -324,7 +324,7 @@ class TagDeleteView(generic.ObjectDeleteView):
class TagBulkImportView(generic.BulkImportView): class TagBulkImportView(generic.BulkImportView):
queryset = Tag.objects.all() queryset = Tag.objects.all()
model_form = forms.TagCSVForm model_form = forms.TagImportForm
table = tables.TagTable table = tables.TagTable

View File

@ -7,32 +7,32 @@ from dcim.models import Device, Interface, Site
from ipam.choices import * from ipam.choices import *
from ipam.constants import * from ipam.constants import *
from ipam.models import * from ipam.models import *
from netbox.forms import NetBoxModelCSVForm from netbox.forms import NetBoxModelImportForm
from tenancy.models import Tenant from tenancy.models import Tenant
from utilities.forms import CSVChoiceField, CSVContentTypeField, CSVModelChoiceField, SlugField from utilities.forms import CSVChoiceField, CSVContentTypeField, CSVModelChoiceField, SlugField
from virtualization.models import VirtualMachine, VMInterface from virtualization.models import VirtualMachine, VMInterface
__all__ = ( __all__ = (
'AggregateCSVForm', 'AggregateImportForm',
'ASNCSVForm', 'ASNImportForm',
'FHRPGroupCSVForm', 'FHRPGroupImportForm',
'IPAddressCSVForm', 'IPAddressImportForm',
'IPRangeCSVForm', 'IPRangeImportForm',
'L2VPNCSVForm', 'L2VPNImportForm',
'L2VPNTerminationCSVForm', 'L2VPNTerminationImportForm',
'PrefixCSVForm', 'PrefixImportForm',
'RIRCSVForm', 'RIRImportForm',
'RoleCSVForm', 'RoleImportForm',
'RouteTargetCSVForm', 'RouteTargetImportForm',
'ServiceCSVForm', 'ServiceImportForm',
'ServiceTemplateCSVForm', 'ServiceTemplateImportForm',
'VLANCSVForm', 'VLANImportForm',
'VLANGroupCSVForm', 'VLANGroupImportForm',
'VRFCSVForm', 'VRFImportForm',
) )
class VRFCSVForm(NetBoxModelCSVForm): class VRFImportForm(NetBoxModelImportForm):
tenant = CSVModelChoiceField( tenant = CSVModelChoiceField(
queryset=Tenant.objects.all(), queryset=Tenant.objects.all(),
required=False, required=False,
@ -45,7 +45,7 @@ class VRFCSVForm(NetBoxModelCSVForm):
fields = ('name', 'rd', 'tenant', 'enforce_unique', 'description', 'comments', 'tags') fields = ('name', 'rd', 'tenant', 'enforce_unique', 'description', 'comments', 'tags')
class RouteTargetCSVForm(NetBoxModelCSVForm): class RouteTargetImportForm(NetBoxModelImportForm):
tenant = CSVModelChoiceField( tenant = CSVModelChoiceField(
queryset=Tenant.objects.all(), queryset=Tenant.objects.all(),
required=False, required=False,
@ -58,7 +58,7 @@ class RouteTargetCSVForm(NetBoxModelCSVForm):
fields = ('name', 'tenant', 'description', 'comments', 'tags') fields = ('name', 'tenant', 'description', 'comments', 'tags')
class RIRCSVForm(NetBoxModelCSVForm): class RIRImportForm(NetBoxModelImportForm):
slug = SlugField() slug = SlugField()
class Meta: class Meta:
@ -69,7 +69,7 @@ class RIRCSVForm(NetBoxModelCSVForm):
} }
class AggregateCSVForm(NetBoxModelCSVForm): class AggregateImportForm(NetBoxModelImportForm):
rir = CSVModelChoiceField( rir = CSVModelChoiceField(
queryset=RIR.objects.all(), queryset=RIR.objects.all(),
to_field_name='name', to_field_name='name',
@ -87,7 +87,7 @@ class AggregateCSVForm(NetBoxModelCSVForm):
fields = ('prefix', 'rir', 'tenant', 'date_added', 'description', 'comments', 'tags') fields = ('prefix', 'rir', 'tenant', 'date_added', 'description', 'comments', 'tags')
class ASNCSVForm(NetBoxModelCSVForm): class ASNImportForm(NetBoxModelImportForm):
rir = CSVModelChoiceField( rir = CSVModelChoiceField(
queryset=RIR.objects.all(), queryset=RIR.objects.all(),
to_field_name='name', to_field_name='name',
@ -105,7 +105,7 @@ class ASNCSVForm(NetBoxModelCSVForm):
fields = ('asn', 'rir', 'tenant', 'description', 'comments', 'tags') fields = ('asn', 'rir', 'tenant', 'description', 'comments', 'tags')
class RoleCSVForm(NetBoxModelCSVForm): class RoleImportForm(NetBoxModelImportForm):
slug = SlugField() slug = SlugField()
class Meta: class Meta:
@ -113,7 +113,7 @@ class RoleCSVForm(NetBoxModelCSVForm):
fields = ('name', 'slug', 'weight', 'description', 'tags') fields = ('name', 'slug', 'weight', 'description', 'tags')
class PrefixCSVForm(NetBoxModelCSVForm): class PrefixImportForm(NetBoxModelImportForm):
vrf = CSVModelChoiceField( vrf = CSVModelChoiceField(
queryset=VRF.objects.all(), queryset=VRF.objects.all(),
to_field_name='name', to_field_name='name',
@ -177,7 +177,7 @@ class PrefixCSVForm(NetBoxModelCSVForm):
self.fields['vlan'].queryset = self.fields['vlan'].queryset.filter(**params) self.fields['vlan'].queryset = self.fields['vlan'].queryset.filter(**params)
class IPRangeCSVForm(NetBoxModelCSVForm): class IPRangeImportForm(NetBoxModelImportForm):
vrf = CSVModelChoiceField( vrf = CSVModelChoiceField(
queryset=VRF.objects.all(), queryset=VRF.objects.all(),
to_field_name='name', to_field_name='name',
@ -208,7 +208,7 @@ class IPRangeCSVForm(NetBoxModelCSVForm):
) )
class IPAddressCSVForm(NetBoxModelCSVForm): class IPAddressImportForm(NetBoxModelImportForm):
vrf = CSVModelChoiceField( vrf = CSVModelChoiceField(
queryset=VRF.objects.all(), queryset=VRF.objects.all(),
to_field_name='name', to_field_name='name',
@ -315,7 +315,7 @@ class IPAddressCSVForm(NetBoxModelCSVForm):
return ipaddress return ipaddress
class FHRPGroupCSVForm(NetBoxModelCSVForm): class FHRPGroupImportForm(NetBoxModelImportForm):
protocol = CSVChoiceField( protocol = CSVChoiceField(
choices=FHRPGroupProtocolChoices choices=FHRPGroupProtocolChoices
) )
@ -329,7 +329,7 @@ class FHRPGroupCSVForm(NetBoxModelCSVForm):
fields = ('protocol', 'group_id', 'auth_type', 'auth_key', 'name', 'description', 'comments', 'tags') fields = ('protocol', 'group_id', 'auth_type', 'auth_key', 'name', 'description', 'comments', 'tags')
class VLANGroupCSVForm(NetBoxModelCSVForm): class VLANGroupImportForm(NetBoxModelImportForm):
slug = SlugField() slug = SlugField()
scope_type = CSVContentTypeField( scope_type = CSVContentTypeField(
queryset=ContentType.objects.filter(model__in=VLANGROUP_SCOPE_TYPES), queryset=ContentType.objects.filter(model__in=VLANGROUP_SCOPE_TYPES),
@ -357,7 +357,7 @@ class VLANGroupCSVForm(NetBoxModelCSVForm):
} }
class VLANCSVForm(NetBoxModelCSVForm): class VLANImportForm(NetBoxModelImportForm):
site = CSVModelChoiceField( site = CSVModelChoiceField(
queryset=Site.objects.all(), queryset=Site.objects.all(),
required=False, required=False,
@ -396,7 +396,7 @@ class VLANCSVForm(NetBoxModelCSVForm):
} }
class ServiceTemplateCSVForm(NetBoxModelCSVForm): class ServiceTemplateImportForm(NetBoxModelImportForm):
protocol = CSVChoiceField( protocol = CSVChoiceField(
choices=ServiceProtocolChoices, choices=ServiceProtocolChoices,
help_text=_('IP protocol') help_text=_('IP protocol')
@ -407,7 +407,7 @@ class ServiceTemplateCSVForm(NetBoxModelCSVForm):
fields = ('name', 'protocol', 'ports', 'description', 'comments', 'tags') fields = ('name', 'protocol', 'ports', 'description', 'comments', 'tags')
class ServiceCSVForm(NetBoxModelCSVForm): class ServiceImportForm(NetBoxModelImportForm):
device = CSVModelChoiceField( device = CSVModelChoiceField(
queryset=Device.objects.all(), queryset=Device.objects.all(),
required=False, required=False,
@ -430,7 +430,7 @@ class ServiceCSVForm(NetBoxModelCSVForm):
fields = ('device', 'virtual_machine', 'name', 'protocol', 'ports', 'description', 'comments', 'tags') fields = ('device', 'virtual_machine', 'name', 'protocol', 'ports', 'description', 'comments', 'tags')
class L2VPNCSVForm(NetBoxModelCSVForm): class L2VPNImportForm(NetBoxModelImportForm):
tenant = CSVModelChoiceField( tenant = CSVModelChoiceField(
queryset=Tenant.objects.all(), queryset=Tenant.objects.all(),
required=False, required=False,
@ -446,7 +446,7 @@ class L2VPNCSVForm(NetBoxModelCSVForm):
fields = ('identifier', 'name', 'slug', 'type', 'description', 'comments', 'tags') fields = ('identifier', 'name', 'slug', 'type', 'description', 'comments', 'tags')
class L2VPNTerminationCSVForm(NetBoxModelCSVForm): class L2VPNTerminationImportForm(NetBoxModelImportForm):
l2vpn = CSVModelChoiceField( l2vpn = CSVModelChoiceField(
queryset=L2VPN.objects.all(), queryset=L2VPN.objects.all(),
required=True, required=True,

View File

@ -72,7 +72,7 @@ class VRFDeleteView(generic.ObjectDeleteView):
class VRFBulkImportView(generic.BulkImportView): class VRFBulkImportView(generic.BulkImportView):
queryset = VRF.objects.all() queryset = VRF.objects.all()
model_form = forms.VRFCSVForm model_form = forms.VRFImportForm
table = tables.VRFTable table = tables.VRFTable
@ -133,7 +133,7 @@ class RouteTargetDeleteView(generic.ObjectDeleteView):
class RouteTargetBulkImportView(generic.BulkImportView): class RouteTargetBulkImportView(generic.BulkImportView):
queryset = RouteTarget.objects.all() queryset = RouteTarget.objects.all()
model_form = forms.RouteTargetCSVForm model_form = forms.RouteTargetImportForm
table = tables.RouteTargetTable table = tables.RouteTargetTable
@ -192,7 +192,7 @@ class RIRDeleteView(generic.ObjectDeleteView):
class RIRBulkImportView(generic.BulkImportView): class RIRBulkImportView(generic.BulkImportView):
queryset = RIR.objects.all() queryset = RIR.objects.all()
model_form = forms.RIRCSVForm model_form = forms.RIRImportForm
table = tables.RIRTable table = tables.RIRTable
@ -265,7 +265,7 @@ class ASNDeleteView(generic.ObjectDeleteView):
class ASNBulkImportView(generic.BulkImportView): class ASNBulkImportView(generic.BulkImportView):
queryset = ASN.objects.all() queryset = ASN.objects.all()
model_form = forms.ASNCSVForm model_form = forms.ASNImportForm
table = tables.ASNTable table = tables.ASNTable
@ -351,7 +351,7 @@ class AggregateDeleteView(generic.ObjectDeleteView):
class AggregateBulkImportView(generic.BulkImportView): class AggregateBulkImportView(generic.BulkImportView):
queryset = Aggregate.objects.all() queryset = Aggregate.objects.all()
model_form = forms.AggregateCSVForm model_form = forms.AggregateImportForm
table = tables.AggregateTable table = tables.AggregateTable
@ -417,7 +417,7 @@ class RoleDeleteView(generic.ObjectDeleteView):
class RoleBulkImportView(generic.BulkImportView): class RoleBulkImportView(generic.BulkImportView):
queryset = Role.objects.all() queryset = Role.objects.all()
model_form = forms.RoleCSVForm model_form = forms.RoleImportForm
table = tables.RoleTable table = tables.RoleTable
@ -592,7 +592,7 @@ class PrefixDeleteView(generic.ObjectDeleteView):
class PrefixBulkImportView(generic.BulkImportView): class PrefixBulkImportView(generic.BulkImportView):
queryset = Prefix.objects.all() queryset = Prefix.objects.all()
model_form = forms.PrefixCSVForm model_form = forms.PrefixImportForm
table = tables.PrefixTable table = tables.PrefixTable
@ -655,7 +655,7 @@ class IPRangeDeleteView(generic.ObjectDeleteView):
class IPRangeBulkImportView(generic.BulkImportView): class IPRangeBulkImportView(generic.BulkImportView):
queryset = IPRange.objects.all() queryset = IPRange.objects.all()
model_form = forms.IPRangeCSVForm model_form = forms.IPRangeImportForm
table = tables.IPRangeTable table = tables.IPRangeTable
@ -836,7 +836,7 @@ class IPAddressBulkCreateView(generic.BulkCreateView):
class IPAddressBulkImportView(generic.BulkImportView): class IPAddressBulkImportView(generic.BulkImportView):
queryset = IPAddress.objects.all() queryset = IPAddress.objects.all()
model_form = forms.IPAddressCSVForm model_form = forms.IPAddressImportForm
table = tables.IPAddressTable table = tables.IPAddressTable
@ -910,7 +910,7 @@ class VLANGroupDeleteView(generic.ObjectDeleteView):
class VLANGroupBulkImportView(generic.BulkImportView): class VLANGroupBulkImportView(generic.BulkImportView):
queryset = VLANGroup.objects.all() queryset = VLANGroup.objects.all()
model_form = forms.VLANGroupCSVForm model_form = forms.VLANGroupImportForm
table = tables.VLANGroupTable table = tables.VLANGroupTable
@ -999,7 +999,7 @@ class FHRPGroupDeleteView(generic.ObjectDeleteView):
class FHRPGroupBulkImportView(generic.BulkImportView): class FHRPGroupBulkImportView(generic.BulkImportView):
queryset = FHRPGroup.objects.all() queryset = FHRPGroup.objects.all()
model_form = forms.FHRPGroupCSVForm model_form = forms.FHRPGroupImportForm
table = tables.FHRPGroupTable table = tables.FHRPGroupTable
@ -1113,7 +1113,7 @@ class VLANDeleteView(generic.ObjectDeleteView):
class VLANBulkImportView(generic.BulkImportView): class VLANBulkImportView(generic.BulkImportView):
queryset = VLAN.objects.all() queryset = VLAN.objects.all()
model_form = forms.VLANCSVForm model_form = forms.VLANImportForm
table = tables.VLANTable table = tables.VLANTable
@ -1159,7 +1159,7 @@ class ServiceTemplateDeleteView(generic.ObjectDeleteView):
class ServiceTemplateBulkImportView(generic.BulkImportView): class ServiceTemplateBulkImportView(generic.BulkImportView):
queryset = ServiceTemplate.objects.all() queryset = ServiceTemplate.objects.all()
model_form = forms.ServiceTemplateCSVForm model_form = forms.ServiceTemplateImportForm
table = tables.ServiceTemplateTable table = tables.ServiceTemplateTable
@ -1212,7 +1212,7 @@ class ServiceDeleteView(generic.ObjectDeleteView):
class ServiceBulkImportView(generic.BulkImportView): class ServiceBulkImportView(generic.BulkImportView):
queryset = Service.objects.all() queryset = Service.objects.all()
model_form = forms.ServiceCSVForm model_form = forms.ServiceImportForm
table = tables.ServiceTable table = tables.ServiceTable
@ -1276,7 +1276,7 @@ class L2VPNDeleteView(generic.ObjectDeleteView):
class L2VPNBulkImportView(generic.BulkImportView): class L2VPNBulkImportView(generic.BulkImportView):
queryset = L2VPN.objects.all() queryset = L2VPN.objects.all()
model_form = forms.L2VPNCSVForm model_form = forms.L2VPNImportForm
table = tables.L2VPNTable table = tables.L2VPNTable
@ -1323,7 +1323,7 @@ class L2VPNTerminationDeleteView(generic.ObjectDeleteView):
class L2VPNTerminationBulkImportView(generic.BulkImportView): class L2VPNTerminationBulkImportView(generic.BulkImportView):
queryset = L2VPNTermination.objects.all() queryset = L2VPNTermination.objects.all()
model_form = forms.L2VPNTerminationCSVForm model_form = forms.L2VPNTerminationImportForm
table = tables.L2VPNTerminationTable table = tables.L2VPNTerminationTable

View File

@ -11,8 +11,9 @@ from utilities.forms import BootstrapMixin, CSVModelForm
from utilities.forms.fields import CSVModelMultipleChoiceField, DynamicModelMultipleChoiceField from utilities.forms.fields import CSVModelMultipleChoiceField, DynamicModelMultipleChoiceField
__all__ = ( __all__ = (
'NetBoxModelForm',
'NetBoxModelCSVForm', 'NetBoxModelCSVForm',
'NetBoxModelForm',
'NetBoxModelImportForm',
'NetBoxModelBulkEditForm', 'NetBoxModelBulkEditForm',
'NetBoxModelFilterSetForm', 'NetBoxModelFilterSetForm',
) )
@ -59,7 +60,7 @@ class NetBoxModelForm(BootstrapMixin, CustomFieldsMixin, forms.ModelForm):
return super().clean() return super().clean()
class NetBoxModelCSVForm(CSVModelForm, NetBoxModelForm): class NetBoxModelImportForm(CSVModelForm, NetBoxModelForm):
""" """
Base form for creating a NetBox objects from CSV data. Used for bulk importing. Base form for creating a NetBox objects from CSV data. Used for bulk importing.
""" """
@ -83,6 +84,14 @@ class NetBoxModelCSVForm(CSVModelForm, NetBoxModelForm):
return customfield.to_form_field(for_csv_import=True) return customfield.to_form_field(for_csv_import=True)
class NetBoxModelCSVForm(NetBoxModelImportForm):
"""
Maintains backward compatibility for NetBoxModelImportForm for plugins.
"""
# TODO: Remove in NetBox v3.5
pass
class NetBoxModelBulkEditForm(BootstrapMixin, CustomFieldsMixin, forms.Form): class NetBoxModelBulkEditForm(BootstrapMixin, CustomFieldsMixin, forms.Form):
""" """
Base form for modifying multiple NetBox objects (of the same type) in bulk via the UI. Adds support for custom Base form for modifying multiple NetBox objects (of the same type) in bulk via the UI. Adds support for custom

View File

@ -1,14 +1,14 @@
from django.utils.translation import gettext as _ from django.utils.translation import gettext as _
from netbox.forms import NetBoxModelCSVForm from netbox.forms import NetBoxModelImportForm
from tenancy.models import * from tenancy.models import *
from utilities.forms import CSVModelChoiceField, SlugField from utilities.forms import CSVModelChoiceField, SlugField
__all__ = ( __all__ = (
'ContactCSVForm', 'ContactImportForm',
'ContactGroupCSVForm', 'ContactGroupImportForm',
'ContactRoleCSVForm', 'ContactRoleImportForm',
'TenantCSVForm', 'TenantImportForm',
'TenantGroupCSVForm', 'TenantGroupImportForm',
) )
@ -16,7 +16,7 @@ __all__ = (
# Tenants # Tenants
# #
class TenantGroupCSVForm(NetBoxModelCSVForm): class TenantGroupImportForm(NetBoxModelImportForm):
parent = CSVModelChoiceField( parent = CSVModelChoiceField(
queryset=TenantGroup.objects.all(), queryset=TenantGroup.objects.all(),
required=False, required=False,
@ -30,7 +30,7 @@ class TenantGroupCSVForm(NetBoxModelCSVForm):
fields = ('name', 'slug', 'parent', 'description', 'tags') fields = ('name', 'slug', 'parent', 'description', 'tags')
class TenantCSVForm(NetBoxModelCSVForm): class TenantImportForm(NetBoxModelImportForm):
slug = SlugField() slug = SlugField()
group = CSVModelChoiceField( group = CSVModelChoiceField(
queryset=TenantGroup.objects.all(), queryset=TenantGroup.objects.all(),
@ -48,7 +48,7 @@ class TenantCSVForm(NetBoxModelCSVForm):
# Contacts # Contacts
# #
class ContactGroupCSVForm(NetBoxModelCSVForm): class ContactGroupImportForm(NetBoxModelImportForm):
parent = CSVModelChoiceField( parent = CSVModelChoiceField(
queryset=ContactGroup.objects.all(), queryset=ContactGroup.objects.all(),
required=False, required=False,
@ -62,7 +62,7 @@ class ContactGroupCSVForm(NetBoxModelCSVForm):
fields = ('name', 'slug', 'parent', 'description', 'tags') fields = ('name', 'slug', 'parent', 'description', 'tags')
class ContactRoleCSVForm(NetBoxModelCSVForm): class ContactRoleImportForm(NetBoxModelImportForm):
slug = SlugField() slug = SlugField()
class Meta: class Meta:
@ -70,7 +70,7 @@ class ContactRoleCSVForm(NetBoxModelCSVForm):
fields = ('name', 'slug', 'description') fields = ('name', 'slug', 'description')
class ContactCSVForm(NetBoxModelCSVForm): class ContactImportForm(NetBoxModelImportForm):
group = CSVModelChoiceField( group = CSVModelChoiceField(
queryset=ContactGroup.objects.all(), queryset=ContactGroup.objects.all(),
required=False, required=False,

View File

@ -59,7 +59,7 @@ class TenantGroupDeleteView(generic.ObjectDeleteView):
class TenantGroupBulkImportView(generic.BulkImportView): class TenantGroupBulkImportView(generic.BulkImportView):
queryset = TenantGroup.objects.all() queryset = TenantGroup.objects.all()
model_form = forms.TenantGroupCSVForm model_form = forms.TenantGroupImportForm
table = tables.TenantGroupTable table = tables.TenantGroupTable
@ -143,7 +143,7 @@ class TenantDeleteView(generic.ObjectDeleteView):
class TenantBulkImportView(generic.BulkImportView): class TenantBulkImportView(generic.BulkImportView):
queryset = Tenant.objects.all() queryset = Tenant.objects.all()
model_form = forms.TenantCSVForm model_form = forms.TenantImportForm
table = tables.TenantTable table = tables.TenantTable
@ -221,7 +221,7 @@ class ContactGroupDeleteView(generic.ObjectDeleteView):
class ContactGroupBulkImportView(generic.BulkImportView): class ContactGroupBulkImportView(generic.BulkImportView):
queryset = ContactGroup.objects.all() queryset = ContactGroup.objects.all()
model_form = forms.ContactGroupCSVForm model_form = forms.ContactGroupImportForm
table = tables.ContactGroupTable table = tables.ContactGroupTable
@ -291,7 +291,7 @@ class ContactRoleDeleteView(generic.ObjectDeleteView):
class ContactRoleBulkImportView(generic.BulkImportView): class ContactRoleBulkImportView(generic.BulkImportView):
queryset = ContactRole.objects.all() queryset = ContactRole.objects.all()
model_form = forms.ContactRoleCSVForm model_form = forms.ContactRoleImportForm
table = tables.ContactRoleTable table = tables.ContactRoleTable
@ -351,7 +351,7 @@ class ContactDeleteView(generic.ObjectDeleteView):
class ContactBulkImportView(generic.BulkImportView): class ContactBulkImportView(generic.BulkImportView):
queryset = Contact.objects.all() queryset = Contact.objects.all()
model_form = forms.ContactCSVForm model_form = forms.ContactImportForm
table = tables.ContactTable table = tables.ContactTable

View File

@ -1,7 +1,7 @@
from django import forms from django import forms
from django.test import TestCase from django.test import TestCase
from ipam.forms import IPAddressCSVForm from ipam.forms import IPAddressImportForm
from utilities.forms.fields import CSVDataField from utilities.forms.fields import CSVDataField
from utilities.forms.utils import expand_alphanumeric_pattern, expand_ipaddress_pattern from utilities.forms.utils import expand_alphanumeric_pattern, expand_ipaddress_pattern
@ -288,7 +288,7 @@ class ExpandAlphanumeric(TestCase):
class CSVDataFieldTest(TestCase): class CSVDataFieldTest(TestCase):
def setUp(self): def setUp(self):
self.field = CSVDataField(from_form=IPAddressCSVForm) self.field = CSVDataField(from_form=IPAddressImportForm)
def test_clean(self): def test_clean(self):
input = """ input = """

View File

@ -2,22 +2,22 @@ from dcim.choices import InterfaceModeChoices
from dcim.models import Device, DeviceRole, Platform, Site from dcim.models import Device, DeviceRole, Platform, Site
from django.utils.translation import gettext as _ from django.utils.translation import gettext as _
from ipam.models import VRF from ipam.models import VRF
from netbox.forms import NetBoxModelCSVForm from netbox.forms import NetBoxModelImportForm
from tenancy.models import Tenant from tenancy.models import Tenant
from utilities.forms import CSVChoiceField, CSVModelChoiceField, SlugField from utilities.forms import CSVChoiceField, CSVModelChoiceField, SlugField
from virtualization.choices import * from virtualization.choices import *
from virtualization.models import * from virtualization.models import *
__all__ = ( __all__ = (
'ClusterCSVForm', 'ClusterImportForm',
'ClusterGroupCSVForm', 'ClusterGroupImportForm',
'ClusterTypeCSVForm', 'ClusterTypeImportForm',
'VirtualMachineCSVForm', 'VirtualMachineImportForm',
'VMInterfaceCSVForm', 'VMInterfaceImportForm',
) )
class ClusterTypeCSVForm(NetBoxModelCSVForm): class ClusterTypeImportForm(NetBoxModelImportForm):
slug = SlugField() slug = SlugField()
class Meta: class Meta:
@ -25,7 +25,7 @@ class ClusterTypeCSVForm(NetBoxModelCSVForm):
fields = ('name', 'slug', 'description', 'tags') fields = ('name', 'slug', 'description', 'tags')
class ClusterGroupCSVForm(NetBoxModelCSVForm): class ClusterGroupImportForm(NetBoxModelImportForm):
slug = SlugField() slug = SlugField()
class Meta: class Meta:
@ -33,7 +33,7 @@ class ClusterGroupCSVForm(NetBoxModelCSVForm):
fields = ('name', 'slug', 'description', 'tags') fields = ('name', 'slug', 'description', 'tags')
class ClusterCSVForm(NetBoxModelCSVForm): class ClusterImportForm(NetBoxModelImportForm):
type = CSVModelChoiceField( type = CSVModelChoiceField(
queryset=ClusterType.objects.all(), queryset=ClusterType.objects.all(),
to_field_name='name', to_field_name='name',
@ -67,7 +67,7 @@ class ClusterCSVForm(NetBoxModelCSVForm):
fields = ('name', 'type', 'group', 'status', 'site', 'description', 'comments', 'tags') fields = ('name', 'type', 'group', 'status', 'site', 'description', 'comments', 'tags')
class VirtualMachineCSVForm(NetBoxModelCSVForm): class VirtualMachineImportForm(NetBoxModelImportForm):
status = CSVChoiceField( status = CSVChoiceField(
choices=VirtualMachineStatusChoices, choices=VirtualMachineStatusChoices,
help_text=_('Operational status') help_text=_('Operational status')
@ -119,7 +119,7 @@ class VirtualMachineCSVForm(NetBoxModelCSVForm):
) )
class VMInterfaceCSVForm(NetBoxModelCSVForm): class VMInterfaceImportForm(NetBoxModelImportForm):
virtual_machine = CSVModelChoiceField( virtual_machine = CSVModelChoiceField(
queryset=VirtualMachine.objects.all(), queryset=VirtualMachine.objects.all(),
to_field_name='name' to_field_name='name'

View File

@ -63,7 +63,7 @@ class ClusterTypeDeleteView(generic.ObjectDeleteView):
class ClusterTypeBulkImportView(generic.BulkImportView): class ClusterTypeBulkImportView(generic.BulkImportView):
queryset = ClusterType.objects.all() queryset = ClusterType.objects.all()
model_form = forms.ClusterTypeCSVForm model_form = forms.ClusterTypeImportForm
table = tables.ClusterTypeTable table = tables.ClusterTypeTable
@ -130,7 +130,7 @@ class ClusterGroupBulkImportView(generic.BulkImportView):
queryset = ClusterGroup.objects.annotate( queryset = ClusterGroup.objects.annotate(
cluster_count=count_related(Cluster, 'group') cluster_count=count_related(Cluster, 'group')
) )
model_form = forms.ClusterGroupCSVForm model_form = forms.ClusterGroupImportForm
table = tables.ClusterGroupTable table = tables.ClusterGroupTable
@ -217,7 +217,7 @@ class ClusterDeleteView(generic.ObjectDeleteView):
class ClusterBulkImportView(generic.BulkImportView): class ClusterBulkImportView(generic.BulkImportView):
queryset = Cluster.objects.all() queryset = Cluster.objects.all()
model_form = forms.ClusterCSVForm model_form = forms.ClusterImportForm
table = tables.ClusterTable table = tables.ClusterTable
@ -403,7 +403,7 @@ class VirtualMachineDeleteView(generic.ObjectDeleteView):
class VirtualMachineBulkImportView(generic.BulkImportView): class VirtualMachineBulkImportView(generic.BulkImportView):
queryset = VirtualMachine.objects.all() queryset = VirtualMachine.objects.all()
model_form = forms.VirtualMachineCSVForm model_form = forms.VirtualMachineImportForm
table = tables.VirtualMachineTable table = tables.VirtualMachineTable
@ -491,7 +491,7 @@ class VMInterfaceDeleteView(generic.ObjectDeleteView):
class VMInterfaceBulkImportView(generic.BulkImportView): class VMInterfaceBulkImportView(generic.BulkImportView):
queryset = VMInterface.objects.all() queryset = VMInterface.objects.all()
model_form = forms.VMInterfaceCSVForm model_form = forms.VMInterfaceImportForm
table = tables.VMInterfaceTable table = tables.VMInterfaceTable

View File

@ -2,20 +2,20 @@ from django.utils.translation import gettext as _
from dcim.choices import LinkStatusChoices from dcim.choices import LinkStatusChoices
from dcim.models import Interface from dcim.models import Interface
from ipam.models import VLAN from ipam.models import VLAN
from netbox.forms import NetBoxModelCSVForm from netbox.forms import NetBoxModelImportForm
from tenancy.models import Tenant from tenancy.models import Tenant
from utilities.forms import CSVChoiceField, CSVModelChoiceField, SlugField from utilities.forms import CSVChoiceField, CSVModelChoiceField, SlugField
from wireless.choices import * from wireless.choices import *
from wireless.models import * from wireless.models import *
__all__ = ( __all__ = (
'WirelessLANCSVForm', 'WirelessLANImportForm',
'WirelessLANGroupCSVForm', 'WirelessLANGroupImportForm',
'WirelessLinkCSVForm', 'WirelessLinkImportForm',
) )
class WirelessLANGroupCSVForm(NetBoxModelCSVForm): class WirelessLANGroupImportForm(NetBoxModelImportForm):
parent = CSVModelChoiceField( parent = CSVModelChoiceField(
queryset=WirelessLANGroup.objects.all(), queryset=WirelessLANGroup.objects.all(),
required=False, required=False,
@ -29,7 +29,7 @@ class WirelessLANGroupCSVForm(NetBoxModelCSVForm):
fields = ('name', 'slug', 'parent', 'description', 'tags') fields = ('name', 'slug', 'parent', 'description', 'tags')
class WirelessLANCSVForm(NetBoxModelCSVForm): class WirelessLANImportForm(NetBoxModelImportForm):
group = CSVModelChoiceField( group = CSVModelChoiceField(
queryset=WirelessLANGroup.objects.all(), queryset=WirelessLANGroup.objects.all(),
required=False, required=False,
@ -71,7 +71,7 @@ class WirelessLANCSVForm(NetBoxModelCSVForm):
) )
class WirelessLinkCSVForm(NetBoxModelCSVForm): class WirelessLinkImportForm(NetBoxModelImportForm):
status = CSVChoiceField( status = CSVChoiceField(
choices=LinkStatusChoices, choices=LinkStatusChoices,
help_text=_('Connection status') help_text=_('Connection status')

View File

@ -52,7 +52,7 @@ class WirelessLANGroupDeleteView(generic.ObjectDeleteView):
class WirelessLANGroupBulkImportView(generic.BulkImportView): class WirelessLANGroupBulkImportView(generic.BulkImportView):
queryset = WirelessLANGroup.objects.all() queryset = WirelessLANGroup.objects.all()
model_form = forms.WirelessLANGroupCSVForm model_form = forms.WirelessLANGroupImportForm
table = tables.WirelessLANGroupTable table = tables.WirelessLANGroupTable
@ -123,7 +123,7 @@ class WirelessLANDeleteView(generic.ObjectDeleteView):
class WirelessLANBulkImportView(generic.BulkImportView): class WirelessLANBulkImportView(generic.BulkImportView):
queryset = WirelessLAN.objects.all() queryset = WirelessLAN.objects.all()
model_form = forms.WirelessLANCSVForm model_form = forms.WirelessLANImportForm
table = tables.WirelessLANTable table = tables.WirelessLANTable
@ -169,7 +169,7 @@ class WirelessLinkDeleteView(generic.ObjectDeleteView):
class WirelessLinkBulkImportView(generic.BulkImportView): class WirelessLinkBulkImportView(generic.BulkImportView):
queryset = WirelessLink.objects.all() queryset = WirelessLink.objects.all()
model_form = forms.WirelessLinkCSVForm model_form = forms.WirelessLinkImportForm
table = tables.WirelessLinkTable table = tables.WirelessLinkTable