1
0
mirror of https://github.com/netbox-community/netbox.git synced 2024-05-10 07:54:54 +00:00

Added CBVs for CircuitTypes

This commit is contained in:
Jeremy Stretch
2016-05-13 12:44:03 -04:00
parent 062e64a34d
commit 558fb60c50
9 changed files with 143 additions and 13 deletions

View File

@ -57,6 +57,21 @@ class ProviderBulkDeleteForm(ConfirmationForm):
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
#

View File

@ -58,6 +58,9 @@ class CircuitType(models.Model):
def __unicode__(self):
return self.name
def get_absolute_url(self):
return "{}?type={}".format(reverse('circuits:circuit_list'), self.slug)
class Circuit(models.Model):
"""

View File

@ -1,7 +1,12 @@
import django_tables2 as tables
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
#

View File

@ -3,6 +3,24 @@ from django.conf.urls import url
from . import views
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/add/$', views.CircuitAddView.as_view(), name='circuit_add'),
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+)/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'),
]

View File

@ -7,10 +7,11 @@ from utilities.views import BulkImportView, BulkEditView, BulkDeleteView, Object
ObjectEditView, ObjectDeleteView
from .filters import CircuitFilter
from .forms import CircuitForm, CircuitImportForm, CircuitBulkEditForm, CircuitBulkDeleteForm, CircuitFilterForm,\
ProviderForm, ProviderImportForm, ProviderBulkEditForm, ProviderBulkDeleteForm
from .models import Circuit, Provider
from .tables import CircuitTable, ProviderTable
from .forms import CircuitTypeForm, CircuitTypeBulkDeleteForm, CircuitForm, CircuitImportForm, CircuitBulkEditForm,\
CircuitBulkDeleteForm, CircuitFilterForm, ProviderForm, ProviderImportForm, ProviderBulkEditForm,\
ProviderBulkDeleteForm
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'
#
# 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
#

View File

@ -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_import' %}"><i class="glyphicon glyphicon-import" aria-hidden="true"></i> Import Circuits</a></li>
{% 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>
</li>
{% if request.user.is_authenticated %}

View 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 %}

View 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 %}

View File

@ -147,6 +147,8 @@ class ObjectEditView(View):
obj.get_absolute_url(), obj))
if '_addanother' in request.POST:
return redirect(request.path)
elif self.return_url:
return redirect(self.return_url)
else:
return redirect(obj.get_absolute_url())