mirror of
https://github.com/netbox-community/netbox.git
synced 2025-07-22 20:12:00 -06:00
Added CBVs for CircuitTypes
This commit is contained in:
parent
062e64a34d
commit
558fb60c50
@ -57,6 +57,21 @@ class ProviderBulkDeleteForm(ConfirmationForm):
|
|||||||
pk = forms.ModelMultipleChoiceField(queryset=Provider.objects.all(), widget=forms.MultipleHiddenInput)
|
pk = forms.ModelMultipleChoiceField(queryset=Provider.objects.all(), widget=forms.MultipleHiddenInput)
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# Circuit types
|
||||||
|
#
|
||||||
|
|
||||||
|
class CircuitTypeForm(forms.ModelForm, BootstrapMixin):
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = CircuitType
|
||||||
|
fields = ['name', 'slug']
|
||||||
|
|
||||||
|
|
||||||
|
class CircuitTypeBulkDeleteForm(ConfirmationForm):
|
||||||
|
pk = forms.ModelMultipleChoiceField(queryset=CircuitType.objects.all(), widget=forms.MultipleHiddenInput)
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Circuits
|
# Circuits
|
||||||
#
|
#
|
||||||
|
@ -58,6 +58,9 @@ class CircuitType(models.Model):
|
|||||||
def __unicode__(self):
|
def __unicode__(self):
|
||||||
return self.name
|
return self.name
|
||||||
|
|
||||||
|
def get_absolute_url(self):
|
||||||
|
return "{}?type={}".format(reverse('circuits:circuit_list'), self.slug)
|
||||||
|
|
||||||
|
|
||||||
class Circuit(models.Model):
|
class Circuit(models.Model):
|
||||||
"""
|
"""
|
||||||
|
@ -1,7 +1,12 @@
|
|||||||
import django_tables2 as tables
|
import django_tables2 as tables
|
||||||
from django_tables2.utils import Accessor
|
from django_tables2.utils import Accessor
|
||||||
|
|
||||||
from .models import Circuit, Provider
|
from .models import Circuit, CircuitType, Provider
|
||||||
|
|
||||||
|
|
||||||
|
CIRCUITTYPE_EDIT_LINK = """
|
||||||
|
{% if perms.circuit.change_circuittype %}<a href="{% url 'circuits:circuittype_edit' slug=record.slug %}">Edit</a>{% endif %}
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
@ -23,6 +28,26 @@ class ProviderTable(tables.Table):
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# Circuit types
|
||||||
|
#
|
||||||
|
|
||||||
|
class CircuitTypeTable(tables.Table):
|
||||||
|
pk = tables.CheckBoxColumn(visible=False, default='')
|
||||||
|
name = tables.LinkColumn(verbose_name='Name')
|
||||||
|
circuit_count = tables.Column(verbose_name='Circuits')
|
||||||
|
slug = tables.Column(verbose_name='Slug')
|
||||||
|
edit = tables.TemplateColumn(template_code=CIRCUITTYPE_EDIT_LINK, verbose_name='')
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = CircuitType
|
||||||
|
fields = ('pk', 'name', 'circuit_count', 'slug', 'edit')
|
||||||
|
empty_text = "No circuit types found."
|
||||||
|
attrs = {
|
||||||
|
'class': 'table table-hover',
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Circuits
|
# Circuits
|
||||||
#
|
#
|
||||||
|
@ -3,6 +3,24 @@ from django.conf.urls import url
|
|||||||
from . import views
|
from . import views
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
|
|
||||||
|
# Providers
|
||||||
|
url(r'^providers/$', views.ProviderListView.as_view(), name='provider_list'),
|
||||||
|
url(r'^providers/add/$', views.ProviderAddView.as_view(), name='provider_add'),
|
||||||
|
url(r'^providers/import/$', views.ProviderBulkImportView.as_view(), name='provider_import'),
|
||||||
|
url(r'^providers/edit/$', views.ProviderBulkEditView.as_view(), name='provider_bulk_edit'),
|
||||||
|
url(r'^providers/delete/$', views.ProviderBulkDeleteView.as_view(), name='provider_bulk_delete'),
|
||||||
|
url(r'^providers/(?P<slug>[\w-]+)/$', views.provider, name='provider'),
|
||||||
|
url(r'^providers/(?P<slug>[\w-]+)/edit/$', views.ProviderEditView.as_view(), name='provider_edit'),
|
||||||
|
url(r'^providers/(?P<slug>[\w-]+)/delete/$', views.ProviderDeleteView.as_view(), name='provider_delete'),
|
||||||
|
|
||||||
|
# Circuit types
|
||||||
|
url(r'^circuit-types/$', views.CircuitTypeListView.as_view(), name='circuittype_list'),
|
||||||
|
url(r'^circuit-types/add/$', views.CircuitTypeAddView.as_view(), name='circuittype_add'),
|
||||||
|
url(r'^circuit-types/delete/$', views.CircuitTypeBulkDeleteView.as_view(), name='circuittype_bulk_delete'),
|
||||||
|
url(r'^circuit-types/(?P<slug>[\w-]+)/edit/$', views.CircuitTypeEditView.as_view(), name='circuittype_edit'),
|
||||||
|
|
||||||
|
# Circuits
|
||||||
url(r'^circuits/$', views.CircuitListView.as_view(), name='circuit_list'),
|
url(r'^circuits/$', views.CircuitListView.as_view(), name='circuit_list'),
|
||||||
url(r'^circuits/add/$', views.CircuitAddView.as_view(), name='circuit_add'),
|
url(r'^circuits/add/$', views.CircuitAddView.as_view(), name='circuit_add'),
|
||||||
url(r'^circuits/import/$', views.CircuitBulkImportView.as_view(), name='circuit_import'),
|
url(r'^circuits/import/$', views.CircuitBulkImportView.as_view(), name='circuit_import'),
|
||||||
@ -12,12 +30,4 @@ urlpatterns = [
|
|||||||
url(r'^circuits/(?P<pk>\d+)/edit/$', views.CircuitEditView.as_view(), name='circuit_edit'),
|
url(r'^circuits/(?P<pk>\d+)/edit/$', views.CircuitEditView.as_view(), name='circuit_edit'),
|
||||||
url(r'^circuits/(?P<pk>\d+)/delete/$', views.CircuitDeleteView.as_view(), name='circuit_delete'),
|
url(r'^circuits/(?P<pk>\d+)/delete/$', views.CircuitDeleteView.as_view(), name='circuit_delete'),
|
||||||
|
|
||||||
url(r'^providers/$', views.ProviderListView.as_view(), name='provider_list'),
|
|
||||||
url(r'^providers/add/$', views.ProviderAddView.as_view(), name='provider_add'),
|
|
||||||
url(r'^providers/import/$', views.ProviderBulkImportView.as_view(), name='provider_import'),
|
|
||||||
url(r'^providers/edit/$', views.ProviderBulkEditView.as_view(), name='provider_bulk_edit'),
|
|
||||||
url(r'^providers/delete/$', views.ProviderBulkDeleteView.as_view(), name='provider_bulk_delete'),
|
|
||||||
url(r'^providers/(?P<slug>[\w-]+)/$', views.provider, name='provider'),
|
|
||||||
url(r'^providers/(?P<slug>[\w-]+)/edit/$', views.ProviderEditView.as_view(), name='provider_edit'),
|
|
||||||
url(r'^providers/(?P<slug>[\w-]+)/delete/$', views.ProviderDeleteView.as_view(), name='provider_delete'),
|
|
||||||
]
|
]
|
||||||
|
@ -7,10 +7,11 @@ from utilities.views import BulkImportView, BulkEditView, BulkDeleteView, Object
|
|||||||
ObjectEditView, ObjectDeleteView
|
ObjectEditView, ObjectDeleteView
|
||||||
|
|
||||||
from .filters import CircuitFilter
|
from .filters import CircuitFilter
|
||||||
from .forms import CircuitForm, CircuitImportForm, CircuitBulkEditForm, CircuitBulkDeleteForm, CircuitFilterForm,\
|
from .forms import CircuitTypeForm, CircuitTypeBulkDeleteForm, CircuitForm, CircuitImportForm, CircuitBulkEditForm,\
|
||||||
ProviderForm, ProviderImportForm, ProviderBulkEditForm, ProviderBulkDeleteForm
|
CircuitBulkDeleteForm, CircuitFilterForm, ProviderForm, ProviderImportForm, ProviderBulkEditForm,\
|
||||||
from .models import Circuit, Provider
|
ProviderBulkDeleteForm
|
||||||
from .tables import CircuitTable, ProviderTable
|
from .models import Circuit, CircuitType, Provider
|
||||||
|
from .tables import CircuitTable, CircuitTypeTable, ProviderTable
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
@ -89,6 +90,38 @@ class ProviderBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
|
|||||||
default_redirect_url = 'circuits:provider_list'
|
default_redirect_url = 'circuits:provider_list'
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# Circuit Types
|
||||||
|
#
|
||||||
|
|
||||||
|
class CircuitTypeListView(ObjectListView):
|
||||||
|
queryset = CircuitType.objects.annotate(circuit_count=Count('circuits'))
|
||||||
|
table = CircuitTypeTable
|
||||||
|
edit_permissions = ['circuits.change_circuittype', 'circuits.delete_circuittype']
|
||||||
|
template_name = 'circuits/circuittype_list.html'
|
||||||
|
|
||||||
|
|
||||||
|
class CircuitTypeAddView(PermissionRequiredMixin, ObjectAddView):
|
||||||
|
permission_required = 'circuits.add_circuittype'
|
||||||
|
model = CircuitType
|
||||||
|
form_class = CircuitTypeForm
|
||||||
|
cancel_url = 'circuits:circuittype_list'
|
||||||
|
|
||||||
|
|
||||||
|
class CircuitTypeEditView(PermissionRequiredMixin, ObjectEditView):
|
||||||
|
permission_required = 'circuits.change_circuittype'
|
||||||
|
model = CircuitType
|
||||||
|
form_class = CircuitTypeForm
|
||||||
|
return_url = 'circuits:circuittype_list'
|
||||||
|
|
||||||
|
|
||||||
|
class CircuitTypeBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
|
||||||
|
permission_required = 'circuits.delete_circuittype'
|
||||||
|
cls = CircuitType
|
||||||
|
form = CircuitTypeBulkDeleteForm
|
||||||
|
default_redirect_url = 'circuits:circuittype_list'
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Circuits
|
# Circuits
|
||||||
#
|
#
|
||||||
|
@ -149,6 +149,13 @@
|
|||||||
<li><a href="{% url 'circuits:circuit_add' %}"><i class="glyphicon glyphicon-plus" aria-hidden="true"></i> Add a Circuit</a></li>
|
<li><a href="{% url 'circuits:circuit_add' %}"><i class="glyphicon glyphicon-plus" aria-hidden="true"></i> Add a Circuit</a></li>
|
||||||
<li><a href="{% url 'circuits:circuit_import' %}"><i class="glyphicon glyphicon-import" aria-hidden="true"></i> Import Circuits</a></li>
|
<li><a href="{% url 'circuits:circuit_import' %}"><i class="glyphicon glyphicon-import" aria-hidden="true"></i> Import Circuits</a></li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
{% if perms.circuits.add_circuit or perms.circuits.add_circuittype %}
|
||||||
|
<li class="divider"></li>
|
||||||
|
{% endif %}
|
||||||
|
<li><a href="{% url 'circuits:circuittype_list' %}"><i class="glyphicon glyphicon-search" aria-hidden="true"></i> Circuit Types</a></li>
|
||||||
|
{% if perms.circuits.add_circuittype %}
|
||||||
|
<li><a href="{% url 'circuits:circuittype_add' %}"><i class="glyphicon glyphicon-plus" aria-hidden="true"></i> Add a Circuit Type</a></li>
|
||||||
|
{% endif %}
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
{% if request.user.is_authenticated %}
|
{% if request.user.is_authenticated %}
|
||||||
|
21
netbox/templates/circuits/circuittype_list.html
Normal file
21
netbox/templates/circuits/circuittype_list.html
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
{% extends '_base.html' %}
|
||||||
|
{% load helpers %}
|
||||||
|
|
||||||
|
{% block title %}Circuit Types{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<div class="pull-right">
|
||||||
|
{% if perms.circuits.add_circuittype %}
|
||||||
|
<a href="{% url 'circuits:circuittype_add' %}" class="btn btn-primary">
|
||||||
|
<span class="glyphicon glyphicon-plus" aria-hidden="true"></span>
|
||||||
|
Add a circuit type
|
||||||
|
</a>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
<h1>Circuit Types</h1>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-12">
|
||||||
|
{% include 'circuits/inc/circuittype_table.html' %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
14
netbox/templates/circuits/inc/circuittype_table.html
Normal file
14
netbox/templates/circuits/inc/circuittype_table.html
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
{% load render_table from django_tables2 %}
|
||||||
|
{% if perms.circuits.delete_circuittype %}
|
||||||
|
<form method="post" class="form form-horizontal">
|
||||||
|
{% csrf_token %}
|
||||||
|
<input type="hidden" name="redirect_url" value="{{ request.path }}{% if request.GET %}?{{ request.GET.urlencode }}{% endif %}" />
|
||||||
|
{% render_table table table_template|default:'table.html' %}
|
||||||
|
<button type="submit" name="_delete" formaction="{% url 'circuits:circuittype_bulk_delete' %}" class="btn btn-danger btn-sm">
|
||||||
|
<span class="glyphicon glyphicon-trash" aria-hidden="true"></span>
|
||||||
|
Delete Selected
|
||||||
|
</button>
|
||||||
|
</form>
|
||||||
|
{% else %}
|
||||||
|
{% render_table table table_template|default:'table.html' %}
|
||||||
|
{% endif %}
|
@ -147,6 +147,8 @@ class ObjectEditView(View):
|
|||||||
obj.get_absolute_url(), obj))
|
obj.get_absolute_url(), obj))
|
||||||
if '_addanother' in request.POST:
|
if '_addanother' in request.POST:
|
||||||
return redirect(request.path)
|
return redirect(request.path)
|
||||||
|
elif self.return_url:
|
||||||
|
return redirect(self.return_url)
|
||||||
else:
|
else:
|
||||||
return redirect(obj.get_absolute_url())
|
return redirect(obj.get_absolute_url())
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user