You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

103 lines
3.6 KiB

from django.contrib.auth.decorators import login_required
from django.contrib import messages
from django.shortcuts import get_object_or_404, redirect, render
from django.urls import reverse_lazy
from django.utils.decorators import method_decorator
from django.utils.translation import gettext_lazy as _
from django.views.generic import UpdateView, CreateView, DeleteView
from djing.lib.decorators import only_admins
from guardian.decorators import permission_required_or_403 as permission_required
from djing.global_base_views import OrderedFilteredList
from ip_pool import models, forms
from group_app.models import Group
login_decs = login_required, only_admins
@method_decorator(login_decs, name='dispatch')
class NetworksListView(OrderedFilteredList):
device_kind_code = None
template_name = 'ip_pool/network_list.html'
context_object_name = 'networks_list'
model = models.NetworkModel
def get_queryset(self):
qs = super().get_queryset()
if isinstance(self.device_kind_code, str):
return qs.filter(kind=self.device_kind_code)
return qs
@method_decorator(login_decs, name='dispatch')
@method_decorator(permission_required('ip_pool.change_networkmodel'), name='dispatch')
class NetworkUpdateView(UpdateView):
model = models.NetworkModel
template_name = 'ip_pool/net_edit.html'
form_class = forms.NetworkForm
pk_url_kwarg = 'net_id'
def form_valid(self, form):
r = super().form_valid(form)
messages.success(self.request, _('Network successfully updated'))
return r
@method_decorator(login_decs, name='dispatch')
@method_decorator(permission_required('ip_pool.delete_networkmodel'), name='dispatch')
class NetworkDeleteView(DeleteView):
model = models.NetworkModel
pk_url_kwarg = 'net_id'
success_url = reverse_lazy('ip_pool:networks')
def delete(self, request, *args, **kwargs):
messages.success(request, _('Network has been deleted'))
return super(NetworkDeleteView, self).delete(request, *args, **kwargs)
@method_decorator(login_decs, name='dispatch')
class IpLeasesListView(OrderedFilteredList):
template_name = 'ip_pool/ip_leases_list.html'
model = models.IpLeaseModel
def get_context_data(self, **kwargs):
net_id = self.kwargs.get('net_id')
context = super().get_context_data(**kwargs)
context['net'] = get_object_or_404(models.NetworkModel, pk=net_id)
return context
def get_queryset(self):
net_id = self.kwargs.get('net_id')
return self.model.objects.filter(network__id=net_id)
@method_decorator(login_decs, name='dispatch')
@method_decorator(permission_required('ip_pool.add_networkmodel'), name='dispatch')
class NetworkCreateView(CreateView):
model = models.NetworkModel
template_name = 'ip_pool/net_add.html'
form_class = forms.NetworkForm
def form_valid(self, form):
r = super().form_valid(form)
messages.success(self.request, _('Network has been created'))
return r
@login_required
def network_in_groups(request, net_id):
network = get_object_or_404(models.NetworkModel, pk=net_id)
if request.method == 'POST':
gr = request.POST.getlist('gr')
network.groups.clear()
network.groups.add(*gr)
messages.success(request, _('Successfully saved'))
return redirect('ip_pool:net_groups', net_id)
selected_grps = tuple(pk[0] for pk in network.groups.only('pk').values_list('pk'))
return render(request, 'ip_pool/network_groups_available.html', {
'object': network,
'selected_grps': selected_grps,
'groups': Group.objects.all().iterator()
})