mirror of
https://github.com/netbox-community/netbox.git
synced 2025-07-24 17:38:37 -06:00
Closes #815: Enable specifying terminations when bulk importing circuits
This commit is contained in:
parent
ae11419045
commit
46e3883f19
@ -2,6 +2,10 @@
|
|||||||
|
|
||||||
## v3.4.0 (FUTURE)
|
## v3.4.0 (FUTURE)
|
||||||
|
|
||||||
|
### Enhancements
|
||||||
|
|
||||||
|
* [#815](https://github.com/netbox-community/netbox/issues/815) - Enable specifying terminations when bulk importing circuits
|
||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* [#10946](https://github.com/netbox-community/netbox/issues/10946) - Fix AttributeError exception when viewing a device with a primary IP and no platform assigned
|
* [#10946](https://github.com/netbox-community/netbox/issues/10946) - Fix AttributeError exception when viewing a device with a primary IP and no platform assigned
|
||||||
|
@ -1,12 +1,16 @@
|
|||||||
|
from django import forms
|
||||||
|
|
||||||
from circuits.choices import CircuitStatusChoices
|
from circuits.choices import CircuitStatusChoices
|
||||||
from circuits.models import *
|
from circuits.models import *
|
||||||
|
from dcim.models import Site
|
||||||
from django.utils.translation import gettext as _
|
from django.utils.translation import gettext as _
|
||||||
from netbox.forms import NetBoxModelImportForm
|
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 BootstrapMixin, CSVChoiceField, CSVModelChoiceField, SlugField
|
||||||
|
|
||||||
__all__ = (
|
__all__ = (
|
||||||
'CircuitImportForm',
|
'CircuitImportForm',
|
||||||
|
'CircuitTerminationImportForm',
|
||||||
'CircuitTypeImportForm',
|
'CircuitTypeImportForm',
|
||||||
'ProviderImportForm',
|
'ProviderImportForm',
|
||||||
'ProviderNetworkImportForm',
|
'ProviderNetworkImportForm',
|
||||||
@ -76,3 +80,23 @@ class CircuitImportForm(NetBoxModelImportForm):
|
|||||||
'cid', 'provider', 'type', 'status', 'tenant', 'install_date', 'termination_date', 'commit_rate',
|
'cid', 'provider', 'type', 'status', 'tenant', 'install_date', 'termination_date', 'commit_rate',
|
||||||
'description', 'comments', 'tags'
|
'description', 'comments', 'tags'
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
class CircuitTerminationImportForm(BootstrapMixin, forms.ModelForm):
|
||||||
|
site = CSVModelChoiceField(
|
||||||
|
queryset=Site.objects.all(),
|
||||||
|
to_field_name='name',
|
||||||
|
required=False
|
||||||
|
)
|
||||||
|
provider_network = CSVModelChoiceField(
|
||||||
|
queryset=ProviderNetwork.objects.all(),
|
||||||
|
to_field_name='name',
|
||||||
|
required=False
|
||||||
|
)
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = CircuitTermination
|
||||||
|
fields = [
|
||||||
|
'circuit', 'term_side', 'site', 'provider_network', 'port_speed', 'upstream_speed', 'xconnect_id',
|
||||||
|
'pp_info', 'description',
|
||||||
|
]
|
||||||
|
@ -108,6 +108,13 @@ class CircuitTypeTestCase(ViewTestCases.OrganizationalObjectViewTestCase):
|
|||||||
class CircuitTestCase(ViewTestCases.PrimaryObjectViewTestCase):
|
class CircuitTestCase(ViewTestCases.PrimaryObjectViewTestCase):
|
||||||
model = Circuit
|
model = Circuit
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
super().setUp()
|
||||||
|
|
||||||
|
self.add_permissions(
|
||||||
|
'circuits.add_circuittermination',
|
||||||
|
)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def setUpTestData(cls):
|
def setUpTestData(cls):
|
||||||
|
|
||||||
|
@ -233,6 +233,16 @@ class CircuitBulkImportView(generic.BulkImportView):
|
|||||||
queryset = Circuit.objects.all()
|
queryset = Circuit.objects.all()
|
||||||
model_form = forms.CircuitImportForm
|
model_form = forms.CircuitImportForm
|
||||||
table = tables.CircuitTable
|
table = tables.CircuitTable
|
||||||
|
additional_permissions = [
|
||||||
|
'circuits.add_circuittermination',
|
||||||
|
]
|
||||||
|
related_object_forms = {
|
||||||
|
'terminations': forms.CircuitTerminationImportForm,
|
||||||
|
}
|
||||||
|
|
||||||
|
def prep_related_object_data(self, parent, data):
|
||||||
|
data.update({'circuit': parent})
|
||||||
|
return data
|
||||||
|
|
||||||
|
|
||||||
class CircuitBulkEditView(generic.BulkEditView):
|
class CircuitBulkEditView(generic.BulkEditView):
|
||||||
|
@ -458,7 +458,7 @@ class BulkImportView(GetReturnURLMixin, BaseMultiObjectView):
|
|||||||
'return_url': self.get_return_url(request),
|
'return_url': self.get_return_url(request),
|
||||||
})
|
})
|
||||||
|
|
||||||
except ValidationError:
|
except (AbortTransaction, ValidationError):
|
||||||
clear_webhooks.send(sender=self)
|
clear_webhooks.send(sender=self)
|
||||||
|
|
||||||
except (AbortRequest, PermissionsViolation) as e:
|
except (AbortRequest, PermissionsViolation) as e:
|
||||||
|
Loading…
Reference in New Issue
Block a user