Dmitry Novikov 7 years ago
parent
commit
05d1c76d85
  1. 8
      devapp/templates/devapp/manage_ports/modal_add_edit_port.html
  2. 2
      devapp/urls.py
  3. 61
      devapp/views.py

8
devapp/templates/devapp/manage_ports/modal_add_edit_port.html

@ -1,9 +1,11 @@
{% load i18n bootstrap3 %}
{% if port_id %}
{% url 'devapp:edit_port' gid did port_id as frm_url %}
{% if object %}
{% url 'devapp:edit_port' gid did object.pk as frm_url %}
{% trans 'Edit' as modal_title %}
{% else %}
{% url 'devapp:add_port' gid did as frm_url %}
{% trans 'Add' as modal_title %}
{% endif %}
<form role="form" action="{{ frm_url }}" method="post">{% csrf_token %}
@ -11,7 +13,7 @@
<div class="modal-header primary">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
<h4 class="modal-title"><span class="glyphicon glyphicon-exclamation-sign"></span>{% trans 'Edit' %}</h4>
<h4 class="modal-title"><span class="glyphicon glyphicon-exclamation-sign"></span>{{ modal_title }}</h4>
</div>
<div class="modal-body">

2
devapp/urls.py

@ -36,7 +36,7 @@ urlpatterns = [
path('<int:group_id>/<int:device_id>/<int:port_id>/del/',
views.delete_single_port, name='del_port'),
path('<int:group_id>/<int:device_id>/<int:port_id>/edit/',
views.edit_single_port, name='edit_port'),
views.EditSinglePort.as_view(), name='edit_port'),
path('fix_device_group/<int:device_id>/', views.fix_device_group,
name='fix_device_group'),
path('search_dev/', views.search_dev),

61
devapp/views.py

@ -9,6 +9,7 @@ from devapp.base_intr import DeviceImplementationError
from django.conf import settings
from django.contrib import messages
from django.contrib.auth.decorators import login_required
from django.contrib.auth.mixins import PermissionRequiredMixin
from django.core.exceptions import PermissionDenied
from django.db import IntegrityError
from django.db.models import Q, Count
@ -167,7 +168,7 @@ class DeviceUpdate(LoginAdminPermissionMixin, UpdateView):
return context
class DeviceCreateView(LoginAdminPermissionMixin, CreateView):
class DeviceCreateView(LoginAdminMixin, PermissionRequiredMixin, CreateView):
template_name = 'devapp/add_dev.html'
context_object_name = 'dev'
model = Device
@ -377,35 +378,39 @@ def delete_single_port(request, group_id, device_id, port_id):
return redirect('devapp:view', group_id, device_id)
@login_required
@only_admins
@permission_required('devapp.change_port')
def edit_single_port(request, group_id: int, device_id: int, port_id: int):
try:
port = Port.objects.get(pk=port_id)
if request.method == 'POST':
frm = PortForm(request.POST, instance=port)
if frm.is_valid():
frm.save()
messages.success(request, _('Port successfully saved'))
else:
messages.error(request, _(
class EditSinglePort(LoginAdminPermissionMixin, UpdateView):
pk_url_kwarg = 'port_id'
permission_required = 'devapp.change_port'
template_name = 'devapp/manage_ports/modal_add_edit_port.html'
def dispatch(self, request, *args, **kwargs):
try:
return super(EditSinglePort, self).dispatch(request, *args, **kwargs)
except (DeviceDBException, DuplicateEntry) as e:
messages.error(request, e)
group_id = self.kwargs.get('group_id')
device_id = self.kwargs.get('device_id')
return redirect('devapp:view', group_id, device_id)
def form_valid(self, form):
messages.success(self.request, _('Port successfully saved'))
return super(EditSinglePort, self).form_valid(form)
def form_invalid(self, form):
messages.error(self.request, _(
'Form is invalid, check fields and try again'))
return redirect('devapp:view', group_id, device_id)
return super(EditSinglePort, self).form_invalid(form)
frm = PortForm(instance=port)
return render(request, 'devapp/manage_ports/modal_add_edit_port.html',
{
'port_id': port_id,
'did': device_id,
'gid': group_id,
'form': frm
})
except Port.DoesNotExist:
messages.error(request, _('Port does not exist'))
except (DeviceDBException, DuplicateEntry) as e:
messages.error(request, e)
return redirect('devapp:view', group_id, device_id)
def get_success_url(self):
group_id = self.kwargs.get('group_id')
return resolve_url('devapp:view', group_id, self.pk)
def get_context_data(self, **kwargs):
group_id = self.kwargs.get('group_id')
context = super(EditSinglePort, self).get_context_data(**kwargs)
context['did'] = self.object.device.pk
context['gid'] = group_id
return super(EditSinglePort, self).get_context_data(**context)
@login_required

Loading…
Cancel
Save