mirror of
https://github.com/netbox-community/netbox.git
synced 2025-08-08 00:28:16 -06:00
Adding export interface and interface list views
This commit is contained in:
parent
ac8a23bd8a
commit
f49a407451
@ -1531,6 +1531,46 @@ class InterfaceBulkDisconnectForm(ConfirmationForm):
|
|||||||
pk = forms.ModelMultipleChoiceField(queryset=Interface.objects.all(), widget=forms.MultipleHiddenInput)
|
pk = forms.ModelMultipleChoiceField(queryset=Interface.objects.all(), widget=forms.MultipleHiddenInput)
|
||||||
|
|
||||||
|
|
||||||
|
class InterfaceCSVForm(forms.ModelForm):
|
||||||
|
device = FlexibleModelChoiceField(
|
||||||
|
queryset=Device.objects.all(),
|
||||||
|
to_field_name='name',
|
||||||
|
help_text='Name or ID of device',
|
||||||
|
error_messages={'invalid_choice': 'Device not found.'}
|
||||||
|
)
|
||||||
|
name = forms.CharField(
|
||||||
|
help_text='Name of interface'
|
||||||
|
)
|
||||||
|
mac_address = forms.CharField(
|
||||||
|
required=False,
|
||||||
|
help_text='MAC address of interface'
|
||||||
|
)
|
||||||
|
description = forms.CharField(
|
||||||
|
required=False,
|
||||||
|
help_text='Description for interface'
|
||||||
|
)
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = Interface
|
||||||
|
fields = [
|
||||||
|
'device', 'name', 'mac_address', 'description'
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
def clean_interface(self):
|
||||||
|
|
||||||
|
interface_name = self.cleaned_data.get('interface_name')
|
||||||
|
if not interface:
|
||||||
|
return None
|
||||||
|
|
||||||
|
return interface
|
||||||
|
|
||||||
|
|
||||||
|
class InterfaceFilterForm(BootstrapMixin, forms.Form):
|
||||||
|
site = forms.ModelChoiceField(required=False, queryset=Site.objects.all(), to_field_name='slug')
|
||||||
|
device = forms.CharField(required=False, label='Device name')
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Interface connections
|
# Interface connections
|
||||||
#
|
#
|
||||||
@ -1696,41 +1736,6 @@ class InterfaceConnectionCSVForm(forms.ModelForm):
|
|||||||
return interface
|
return interface
|
||||||
|
|
||||||
|
|
||||||
class InterfaceCSVForm(forms.ModelForm):
|
|
||||||
device = FlexibleModelChoiceField(
|
|
||||||
queryset=Device.objects.all(),
|
|
||||||
to_field_name='name',
|
|
||||||
help_text='Name or ID of device',
|
|
||||||
error_messages={'invalid_choice': 'Device not found.'}
|
|
||||||
)
|
|
||||||
name = forms.CharField(
|
|
||||||
help_text='Name of interface'
|
|
||||||
)
|
|
||||||
mac_address = forms.CharField(
|
|
||||||
required=False,
|
|
||||||
help_text='MAC address of interface'
|
|
||||||
)
|
|
||||||
description = forms.CharField(
|
|
||||||
required=False,
|
|
||||||
help_text='Description for interface'
|
|
||||||
)
|
|
||||||
|
|
||||||
class Meta:
|
|
||||||
model = Interface
|
|
||||||
fields = [
|
|
||||||
'device', 'name', 'mac_address', 'description'
|
|
||||||
]
|
|
||||||
|
|
||||||
|
|
||||||
def clean_interface(self):
|
|
||||||
|
|
||||||
interface_name = self.cleaned_data.get('interface_name')
|
|
||||||
if not interface:
|
|
||||||
return None
|
|
||||||
|
|
||||||
return interface
|
|
||||||
|
|
||||||
|
|
||||||
class InterfaceConnectionDeletionForm(ConfirmationForm):
|
class InterfaceConnectionDeletionForm(ConfirmationForm):
|
||||||
# Used for HTTP redirect upon successful deletion
|
# Used for HTTP redirect upon successful deletion
|
||||||
device = forms.ModelChoiceField(queryset=Device.objects.all(), widget=forms.HiddenInput(), required=False)
|
device = forms.ModelChoiceField(queryset=Device.objects.all(), widget=forms.HiddenInput(), required=False)
|
||||||
|
@ -177,7 +177,8 @@ urlpatterns = [
|
|||||||
url(r'^interface-connections/(?P<pk>\d+)/delete/$', views.interfaceconnection_delete, name='interfaceconnection_delete'),
|
url(r'^interface-connections/(?P<pk>\d+)/delete/$', views.interfaceconnection_delete, name='interfaceconnection_delete'),
|
||||||
url(r'^interfaces/(?P<pk>\d+)/edit/$', views.InterfaceEditView.as_view(), name='interface_edit'),
|
url(r'^interfaces/(?P<pk>\d+)/edit/$', views.InterfaceEditView.as_view(), name='interface_edit'),
|
||||||
url(r'^interfaces/(?P<pk>\d+)/delete/$', views.InterfaceDeleteView.as_view(), name='interface_delete'),
|
url(r'^interfaces/(?P<pk>\d+)/delete/$', views.InterfaceDeleteView.as_view(), name='interface_delete'),
|
||||||
url(r'^interfaces/import/$', views.InterfacesBulkImportView.as_view(), name='interfaces_import'),
|
url(r'^interfaces/$', views.InterfaceListView.as_view(), name='interface_list'),
|
||||||
|
url(r'^interfaces/import/$', views.InterfacesBulkImportView.as_view(), name='interface_import'),
|
||||||
|
|
||||||
# Device bays
|
# Device bays
|
||||||
url(r'^devices/device-bays/add/$', views.DeviceBulkAddDeviceBayView.as_view(), name='device_bulk_add_devicebay'),
|
url(r'^devices/device-bays/add/$', views.DeviceBulkAddDeviceBayView.as_view(), name='device_bulk_add_devicebay'),
|
||||||
|
@ -1548,6 +1548,22 @@ class InterfaceBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
|
|||||||
table = tables.InterfaceTable
|
table = tables.InterfaceTable
|
||||||
|
|
||||||
|
|
||||||
|
class InterfaceBulkImportView(PermissionRequiredMixin, BulkImportView):
|
||||||
|
permission_required = 'dcim.change_interface'
|
||||||
|
model_form = forms.InterfaceCSVForm
|
||||||
|
table = tables.InterfaceImportTable
|
||||||
|
default_return_url = 'dcim:interface_list'
|
||||||
|
|
||||||
|
|
||||||
|
class InterfaceListView(ObjectListView):
|
||||||
|
queryset = InterfaceConnection.objects.select_related('device')\
|
||||||
|
.order_by('device', 'interface')
|
||||||
|
filter = filters.InterfaceFilter
|
||||||
|
filter_form = forms.InterfaceFilterForm
|
||||||
|
table = tables.InterfaceTable
|
||||||
|
template_name = 'dcim/interface_list.html'
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Device bays
|
# Device bays
|
||||||
#
|
#
|
||||||
@ -1838,13 +1854,6 @@ class InterfaceConnectionsBulkImportView(PermissionRequiredMixin, BulkImportView
|
|||||||
default_return_url = 'dcim:interface_connections_list'
|
default_return_url = 'dcim:interface_connections_list'
|
||||||
|
|
||||||
|
|
||||||
class InterfacesBulkImportView(PermissionRequiredMixin, BulkImportView):
|
|
||||||
permission_required = 'dcim.change_interface'
|
|
||||||
model_form = forms.InterfaceCSVForm
|
|
||||||
table = tables.InterfaceImportTable
|
|
||||||
default_return_url = 'dcim:device_list'
|
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Connections
|
# Connections
|
||||||
#
|
#
|
||||||
|
@ -86,7 +86,7 @@
|
|||||||
<li><a href="{% url 'dcim:device_import' %}"><i class="fa fa-download" aria-hidden="true"></i> Import Devices</a></li>
|
<li><a href="{% url 'dcim:device_import' %}"><i class="fa fa-download" aria-hidden="true"></i> Import Devices</a></li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if perms.dcim.add_interface %}
|
{% if perms.dcim.add_interface %}
|
||||||
<li><a href="{% url 'dcim:interfaces_import' %}"><i class="fa fa-download" aria-hidden="true"></i> Import Interfaces</a></li>
|
<li><a href="{% url 'dcim:interface_import' %}"><i class="fa fa-download" aria-hidden="true"></i> Import Interfaces</a></li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if perms.ipam.add_device or perms.ipam.add_devicetype %}
|
{% if perms.ipam.add_device or perms.ipam.add_devicetype %}
|
||||||
<li class="divider"></li>
|
<li class="divider"></li>
|
||||||
|
@ -376,7 +376,7 @@
|
|||||||
<div class="panel panel-default">
|
<div class="panel panel-default">
|
||||||
<div class="pull-right">
|
<div class="pull-right">
|
||||||
{% if perms.dcim.add_interface %}
|
{% if perms.dcim.add_interface %}
|
||||||
<a href="{% url 'dcim:interfaces_import' %}" class="btn btn-info">
|
<a href="{% url 'dcim:interface_import' %}" class="btn btn-info">
|
||||||
<span class="fa fa-download" aria-hidden="true"></span>
|
<span class="fa fa-download" aria-hidden="true"></span>
|
||||||
Import Interfaces
|
Import Interfaces
|
||||||
</a>
|
</a>
|
||||||
|
24
netbox/templates/dcim/interface_list.html
Normal file
24
netbox/templates/dcim/interface_list.html
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
{% extends '_base.html' %}
|
||||||
|
|
||||||
|
{% block title %}Interfaces{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<div class="pull-right">
|
||||||
|
{% if perms.dcim.add_interfaces %}
|
||||||
|
<a href="{% url 'dcim:interface_import' %}" class="btn btn-info">
|
||||||
|
<span class="fa fa-download" aria-hidden="true"></span>
|
||||||
|
Import Interfaces
|
||||||
|
</a>
|
||||||
|
{% endif %}
|
||||||
|
{% include 'inc/export_button.html' with obj_type='interface' %}
|
||||||
|
</div>
|
||||||
|
<h1>Interface Connections</h1>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-9">
|
||||||
|
{% include 'responsive_table.html' %}
|
||||||
|
</div>
|
||||||
|
<div class="col-md-3">
|
||||||
|
{% include 'inc/search_panel.html' %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
Loading…
Reference in New Issue
Block a user