mirror of
https://github.com/netbox-community/netbox.git
synced 2024-05-10 07:54:54 +00:00
Merge branch 'feature' into 6732-asn-model
This commit is contained in:
@ -1,11 +1,13 @@
|
||||
from django.contrib.contenttypes.models import ContentType
|
||||
from django.db.models import Prefetch
|
||||
from django.db.models.expressions import RawSQL
|
||||
from django.http import Http404
|
||||
from django.shortcuts import get_object_or_404, redirect, render
|
||||
from django.urls import reverse
|
||||
|
||||
from dcim.models import Device, Interface, Site
|
||||
from dcim.tables import SiteTable
|
||||
from netbox.views import generic
|
||||
from utilities.forms import TableConfigForm
|
||||
from utilities.tables import paginate_table
|
||||
from utilities.utils import count_related
|
||||
from virtualization.models import VirtualMachine, VMInterface
|
||||
@ -883,6 +885,113 @@ class VLANGroupBulkDeleteView(generic.BulkDeleteView):
|
||||
table = tables.VLANGroupTable
|
||||
|
||||
|
||||
#
|
||||
# FHRP groups
|
||||
#
|
||||
|
||||
class FHRPGroupListView(generic.ObjectListView):
|
||||
queryset = FHRPGroup.objects.annotate(
|
||||
member_count=count_related(FHRPGroupAssignment, 'group')
|
||||
)
|
||||
filterset = filtersets.FHRPGroupFilterSet
|
||||
filterset_form = forms.FHRPGroupFilterForm
|
||||
table = tables.FHRPGroupTable
|
||||
|
||||
|
||||
class FHRPGroupView(generic.ObjectView):
|
||||
queryset = FHRPGroup.objects.all()
|
||||
|
||||
def get_extra_context(self, request, instance):
|
||||
# Get assigned IP addresses
|
||||
ipaddress_table = tables.AssignedIPAddressesTable(
|
||||
data=instance.ip_addresses.restrict(request.user, 'view').prefetch_related('vrf', 'tenant'),
|
||||
orderable=False
|
||||
)
|
||||
|
||||
# Get assigned interfaces
|
||||
members_table = tables.FHRPGroupAssignmentTable(
|
||||
data=FHRPGroupAssignment.objects.restrict(request.user, 'view').filter(group=instance),
|
||||
orderable=False
|
||||
)
|
||||
members_table.columns.hide('group')
|
||||
|
||||
return {
|
||||
'ipaddress_table': ipaddress_table,
|
||||
'members_table': members_table,
|
||||
'member_count': FHRPGroupAssignment.objects.filter(group=instance).count(),
|
||||
}
|
||||
|
||||
|
||||
class FHRPGroupEditView(generic.ObjectEditView):
|
||||
queryset = FHRPGroup.objects.all()
|
||||
model_form = forms.FHRPGroupForm
|
||||
template_name = 'ipam/fhrpgroup_edit.html'
|
||||
|
||||
def get_return_url(self, request, obj=None):
|
||||
return_url = super().get_return_url(request, obj)
|
||||
|
||||
# If we're redirecting the user to the FHRPGroupAssignment creation form,
|
||||
# initialize the group field with the FHRPGroup we just saved.
|
||||
if return_url.startswith(reverse('ipam:fhrpgroupassignment_add')):
|
||||
return_url += f'&group={obj.pk}'
|
||||
|
||||
return return_url
|
||||
|
||||
|
||||
class FHRPGroupDeleteView(generic.ObjectDeleteView):
|
||||
queryset = FHRPGroup.objects.all()
|
||||
|
||||
|
||||
class FHRPGroupBulkImportView(generic.BulkImportView):
|
||||
queryset = FHRPGroup.objects.all()
|
||||
model_form = forms.FHRPGroupCSVForm
|
||||
table = tables.FHRPGroupTable
|
||||
|
||||
|
||||
class FHRPGroupBulkEditView(generic.BulkEditView):
|
||||
queryset = FHRPGroup.objects.all()
|
||||
filterset = filtersets.FHRPGroupFilterSet
|
||||
table = tables.FHRPGroupTable
|
||||
form = forms.FHRPGroupBulkEditForm
|
||||
|
||||
|
||||
class FHRPGroupBulkDeleteView(generic.BulkDeleteView):
|
||||
queryset = FHRPGroup.objects.all()
|
||||
filterset = filtersets.FHRPGroupFilterSet
|
||||
table = tables.FHRPGroupTable
|
||||
|
||||
|
||||
#
|
||||
# FHRP group assignments
|
||||
#
|
||||
|
||||
class FHRPGroupAssignmentEditView(generic.ObjectEditView):
|
||||
queryset = FHRPGroupAssignment.objects.all()
|
||||
model_form = forms.FHRPGroupAssignmentForm
|
||||
template_name = 'ipam/fhrpgroupassignment_edit.html'
|
||||
|
||||
def alter_obj(self, instance, request, args, kwargs):
|
||||
if not instance.pk:
|
||||
# Assign the interface based on URL kwargs
|
||||
try:
|
||||
app_label, model = request.GET.get('interface_type').split('.')
|
||||
except (AttributeError, ValueError):
|
||||
raise Http404("Content type not specified")
|
||||
content_type = get_object_or_404(ContentType, app_label=app_label, model=model)
|
||||
instance.interface = get_object_or_404(content_type.model_class(), pk=request.GET.get('interface_id'))
|
||||
return instance
|
||||
|
||||
def get_return_url(self, request, obj=None):
|
||||
return obj.interface.get_absolute_url() if obj else super().get_return_url(request)
|
||||
|
||||
|
||||
class FHRPGroupAssignmentDeleteView(generic.ObjectDeleteView):
|
||||
queryset = FHRPGroupAssignment.objects.all()
|
||||
|
||||
def get_return_url(self, request, obj=None):
|
||||
return obj.interface.get_absolute_url() if obj else super().get_return_url(request)
|
||||
|
||||
|
||||
#
|
||||
# VLANs
|
||||
#
|
||||
|
Reference in New Issue
Block a user