mirror of
https://github.com/netbox-community/netbox.git
synced 2024-05-10 07:54:54 +00:00
Introduced CableView and CableEditView
This commit is contained in:
@ -2131,7 +2131,7 @@ class RearPortBulkRenameForm(BulkRenameForm):
|
||||
# Cables
|
||||
#
|
||||
|
||||
class CableForm(BootstrapMixin, ChainedFieldsMixin, forms.ModelForm):
|
||||
class CableCreateForm(BootstrapMixin, ChainedFieldsMixin, forms.ModelForm):
|
||||
termination_b_site = forms.ModelChoiceField(
|
||||
queryset=Site.objects.all(),
|
||||
label='Site',
|
||||
@ -2198,7 +2198,7 @@ class CableForm(BootstrapMixin, ChainedFieldsMixin, forms.ModelForm):
|
||||
]
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(CableForm, self).__init__(*args, **kwargs)
|
||||
super(CableCreateForm, self).__init__(*args, **kwargs)
|
||||
|
||||
# Define available types for endpoint B based on the type of endpoint A
|
||||
termination_a_type = self.instance.termination_a._meta.model_name
|
||||
@ -2207,6 +2207,13 @@ class CableForm(BootstrapMixin, ChainedFieldsMixin, forms.ModelForm):
|
||||
)
|
||||
|
||||
|
||||
class CableForm(BootstrapMixin, forms.ModelForm):
|
||||
|
||||
class Meta:
|
||||
model = Cable
|
||||
fields = ('type', 'status', 'label', 'color')
|
||||
|
||||
|
||||
class CableFilterForm(BootstrapMixin, forms.Form):
|
||||
model = Cable
|
||||
q = forms.CharField(required=False, label='Search')
|
||||
|
@ -2380,6 +2380,9 @@ class Cable(ChangeLoggedModel):
|
||||
return '{} (#{})'.format(self.label, self.pk)
|
||||
return '#{}'.format(self.pk)
|
||||
|
||||
def get_absolute_url(self):
|
||||
return reverse('dcim:cable', args=[self.pk])
|
||||
|
||||
def get_path_endpoints(self):
|
||||
"""
|
||||
Traverse both ends of a cable path and return its connected endpoints. Note that one or both endpoints may be
|
||||
|
@ -621,9 +621,10 @@ class DeviceBayTable(BaseTable):
|
||||
|
||||
class CableTable(BaseTable):
|
||||
# django-tables2 adds CSS `class="label"` which causes rendering issues
|
||||
_label = tables.Column(
|
||||
accessor=Accessor('label'),
|
||||
verbose_name='Label'
|
||||
pk = tables.LinkColumn(
|
||||
viewname='dcim:cable',
|
||||
args=[Accessor('pk')],
|
||||
verbose_name='PK'
|
||||
)
|
||||
device_a = tables.LinkColumn(
|
||||
viewname='dcim:device',
|
||||
@ -652,7 +653,7 @@ class CableTable(BaseTable):
|
||||
|
||||
class Meta(BaseTable.Meta):
|
||||
model = Cable
|
||||
fields = ('_label', 'device_a', 'termination_a', 'device_b', 'termination_b', 'status', 'type', 'color')
|
||||
fields = ('pk', 'device_a', 'termination_a', 'device_b', 'termination_b', 'status', 'type', 'color')
|
||||
|
||||
|
||||
#
|
||||
|
@ -252,6 +252,8 @@ urlpatterns = [
|
||||
|
||||
# Cables
|
||||
url(r'^cables/$', views.CableListView.as_view(), name='cable_list'),
|
||||
url(r'^cables/(?P<pk>\d+)/$', views.CableView.as_view(), name='cable'),
|
||||
url(r'^cables/(?P<pk>\d+)/edit/$', views.CableEditView.as_view(), name='cable_edit'),
|
||||
url(r'^cables/(?P<pk>\d+)/delete/$', views.CableDeleteView.as_view(), name='cable_delete'),
|
||||
|
||||
# Console/power/interface connections
|
||||
|
@ -2023,10 +2023,21 @@ class CableListView(ObjectListView):
|
||||
template_name = 'dcim/cable_list.html'
|
||||
|
||||
|
||||
class CableView(View):
|
||||
|
||||
def get(self, request, pk):
|
||||
|
||||
cable = get_object_or_404(Cable, pk=pk)
|
||||
|
||||
return render(request, 'dcim/cable.html', {
|
||||
'cable': cable,
|
||||
})
|
||||
|
||||
|
||||
class CableCreateView(PermissionRequiredMixin, ObjectEditView):
|
||||
permission_required = 'dcim.add_cable'
|
||||
model = Cable
|
||||
model_form = forms.CableForm
|
||||
model_form = forms.CableCreateForm
|
||||
template_name = 'dcim/cable_connect.html'
|
||||
|
||||
def alter_obj(self, obj, request, url_args, url_kwargs):
|
||||
@ -2039,6 +2050,13 @@ class CableCreateView(PermissionRequiredMixin, ObjectEditView):
|
||||
return obj
|
||||
|
||||
|
||||
class CableEditView(PermissionRequiredMixin, ObjectEditView):
|
||||
permission_required = 'dcim.change_cable'
|
||||
model = Cable
|
||||
model_form = forms.CableForm
|
||||
default_return_url = 'dcim:cable_list'
|
||||
|
||||
|
||||
class CableDeleteView(PermissionRequiredMixin, ObjectDeleteView):
|
||||
permission_required = 'dcim.delete_cable'
|
||||
model = Cable
|
||||
|
72
netbox/templates/dcim/cable.html
Normal file
72
netbox/templates/dcim/cable.html
Normal file
@ -0,0 +1,72 @@
|
||||
{% extends '_base.html' %}
|
||||
{% load helpers %}
|
||||
|
||||
{% block header %}
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<ol class="breadcrumb">
|
||||
<li><a href="{% url 'dcim:cable_list' %}">Cables</a></li>
|
||||
<li>{{ cable }}</li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
<div class="pull-right">
|
||||
{% if perms.dcim.change_cable %}
|
||||
<a href="{% url 'dcim:cable_edit' pk=cable.pk %}" class="btn btn-warning">
|
||||
<span class="fa fa-pencil" aria-hidden="true"></span> Edit this cable
|
||||
</a>
|
||||
{% endif %}
|
||||
{% if perms.dcim.delete_cable %}
|
||||
<a href="{% url 'dcim:cable_delete' pk=cable.pk %}" class="btn btn-danger">
|
||||
<span class="fa fa-trash" aria-hidden="true"></span> Delete this cable
|
||||
</a>
|
||||
{% endif %}
|
||||
</div>
|
||||
<h1>{% block title %}Cable {{ cable }}{% endblock %}</h1>
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<strong>Cable</strong>
|
||||
</div>
|
||||
<table class="table table-hover panel-body attr-table">
|
||||
<tr>
|
||||
<td>Type</td>
|
||||
<td>{{ cable.get_type_display }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Status</td>
|
||||
<td>{{ cable.get_status_display }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Label</td>
|
||||
<td>{% if cable.label %}{{ cable.label }}{% else %}<span class="text-muted">N/A</span>{% endif %}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Color</td>
|
||||
<td>
|
||||
<label class="label" style="background-color: #{{ cable.color }}">{{ cable.color }}</label>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<strong>Termination A</strong>
|
||||
</div>
|
||||
{% include 'dcim/inc/cable_termination.html' with termination=cable.termination_a %}
|
||||
</div>
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<strong>Termination B</strong>
|
||||
</div>
|
||||
{% include 'dcim/inc/cable_termination.html' with termination=cable.termination_b %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
12
netbox/templates/dcim/inc/cable_termination.html
Normal file
12
netbox/templates/dcim/inc/cable_termination.html
Normal file
@ -0,0 +1,12 @@
|
||||
<table class="table table-hover panel-body attr-table">
|
||||
<tr>
|
||||
<td>Device</td>
|
||||
<td>
|
||||
<a href="{{ termination.device.parent.get_absolute_url }}">{{ termination.device }}</a>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Component</td>
|
||||
<td>{{ termination_a }}</td>
|
||||
</tr>
|
||||
</table>
|
Reference in New Issue
Block a user