Relocate and group generic views

This commit is contained in:
Jeremy Stretch 2020-11-11 16:07:38 -05:00
parent 8714c33e8a
commit b3c770216e
12 changed files with 1682 additions and 1699 deletions

View File

@ -4,11 +4,9 @@ from django.db.models import Count
from django.shortcuts import get_object_or_404, redirect, render
from django_tables2 import RequestConfig
from netbox.views import generic
from utilities.forms import ConfirmationForm
from utilities.paginator import EnhancedPaginator, get_paginate_count
from utilities.views import (
BulkDeleteView, BulkEditView, BulkImportView, ObjectView, ObjectDeleteView, ObjectEditView, ObjectListView,
)
from . import filters, forms, tables
from .choices import CircuitTerminationSideChoices
from .models import Circuit, CircuitTermination, CircuitType, Provider
@ -18,14 +16,14 @@ from .models import Circuit, CircuitTermination, CircuitType, Provider
# Providers
#
class ProviderListView(ObjectListView):
class ProviderListView(generic.ObjectListView):
queryset = Provider.objects.annotate(count_circuits=Count('circuits')).order_by(*Provider._meta.ordering)
filterset = filters.ProviderFilterSet
filterset_form = forms.ProviderFilterForm
table = tables.ProviderTable
class ProviderView(ObjectView):
class ProviderView(generic.ObjectView):
queryset = Provider.objects.all()
def get(self, request, slug):
@ -52,30 +50,30 @@ class ProviderView(ObjectView):
})
class ProviderEditView(ObjectEditView):
class ProviderEditView(generic.ObjectEditView):
queryset = Provider.objects.all()
model_form = forms.ProviderForm
template_name = 'circuits/provider_edit.html'
class ProviderDeleteView(ObjectDeleteView):
class ProviderDeleteView(generic.ObjectDeleteView):
queryset = Provider.objects.all()
class ProviderBulkImportView(BulkImportView):
class ProviderBulkImportView(generic.BulkImportView):
queryset = Provider.objects.all()
model_form = forms.ProviderCSVForm
table = tables.ProviderTable
class ProviderBulkEditView(BulkEditView):
class ProviderBulkEditView(generic.BulkEditView):
queryset = Provider.objects.annotate(count_circuits=Count('circuits')).order_by(*Provider._meta.ordering)
filterset = filters.ProviderFilterSet
table = tables.ProviderTable
form = forms.ProviderBulkEditForm
class ProviderBulkDeleteView(BulkDeleteView):
class ProviderBulkDeleteView(generic.BulkDeleteView):
queryset = Provider.objects.annotate(count_circuits=Count('circuits')).order_by(*Provider._meta.ordering)
filterset = filters.ProviderFilterSet
table = tables.ProviderTable
@ -85,27 +83,27 @@ class ProviderBulkDeleteView(BulkDeleteView):
# Circuit Types
#
class CircuitTypeListView(ObjectListView):
class CircuitTypeListView(generic.ObjectListView):
queryset = CircuitType.objects.annotate(circuit_count=Count('circuits')).order_by(*CircuitType._meta.ordering)
table = tables.CircuitTypeTable
class CircuitTypeEditView(ObjectEditView):
class CircuitTypeEditView(generic.ObjectEditView):
queryset = CircuitType.objects.all()
model_form = forms.CircuitTypeForm
class CircuitTypeDeleteView(ObjectDeleteView):
class CircuitTypeDeleteView(generic.ObjectDeleteView):
queryset = CircuitType.objects.all()
class CircuitTypeBulkImportView(BulkImportView):
class CircuitTypeBulkImportView(generic.BulkImportView):
queryset = CircuitType.objects.all()
model_form = forms.CircuitTypeCSVForm
table = tables.CircuitTypeTable
class CircuitTypeBulkDeleteView(BulkDeleteView):
class CircuitTypeBulkDeleteView(generic.BulkDeleteView):
queryset = CircuitType.objects.annotate(circuit_count=Count('circuits')).order_by(*CircuitType._meta.ordering)
table = tables.CircuitTypeTable
@ -114,7 +112,7 @@ class CircuitTypeBulkDeleteView(BulkDeleteView):
# Circuits
#
class CircuitListView(ObjectListView):
class CircuitListView(generic.ObjectListView):
queryset = Circuit.objects.prefetch_related(
'provider', 'type', 'tenant', 'terminations'
).annotate_sites()
@ -123,7 +121,7 @@ class CircuitListView(ObjectListView):
table = tables.CircuitTable
class CircuitView(ObjectView):
class CircuitView(generic.ObjectView):
queryset = Circuit.objects.all()
def get(self, request, pk):
@ -152,23 +150,23 @@ class CircuitView(ObjectView):
})
class CircuitEditView(ObjectEditView):
class CircuitEditView(generic.ObjectEditView):
queryset = Circuit.objects.all()
model_form = forms.CircuitForm
template_name = 'circuits/circuit_edit.html'
class CircuitDeleteView(ObjectDeleteView):
class CircuitDeleteView(generic.ObjectDeleteView):
queryset = Circuit.objects.all()
class CircuitBulkImportView(BulkImportView):
class CircuitBulkImportView(generic.BulkImportView):
queryset = Circuit.objects.all()
model_form = forms.CircuitCSVForm
table = tables.CircuitTable
class CircuitBulkEditView(BulkEditView):
class CircuitBulkEditView(generic.BulkEditView):
queryset = Circuit.objects.prefetch_related(
'provider', 'type', 'tenant', 'terminations'
)
@ -177,7 +175,7 @@ class CircuitBulkEditView(BulkEditView):
form = forms.CircuitBulkEditForm
class CircuitBulkDeleteView(BulkDeleteView):
class CircuitBulkDeleteView(generic.BulkDeleteView):
queryset = Circuit.objects.prefetch_related(
'provider', 'type', 'tenant', 'terminations'
)
@ -185,7 +183,7 @@ class CircuitBulkDeleteView(BulkDeleteView):
table = tables.CircuitTable
class CircuitSwapTerminations(ObjectEditView):
class CircuitSwapTerminations(generic.ObjectEditView):
"""
Swap the A and Z terminations of a circuit.
"""
@ -258,7 +256,7 @@ class CircuitSwapTerminations(ObjectEditView):
# Circuit terminations
#
class CircuitTerminationEditView(ObjectEditView):
class CircuitTerminationEditView(generic.ObjectEditView):
queryset = CircuitTermination.objects.all()
model_form = forms.CircuitTerminationForm
template_name = 'circuits/circuittermination_edit.html'
@ -272,5 +270,5 @@ class CircuitTerminationEditView(ObjectEditView):
return obj.circuit.get_absolute_url()
class CircuitTerminationDeleteView(ObjectDeleteView):
class CircuitTerminationDeleteView(generic.ObjectDeleteView):
queryset = CircuitTermination.objects.all()

File diff suppressed because it is too large Load Diff

View File

@ -10,14 +10,12 @@ from django_tables2 import RequestConfig
from rq import Worker
from dcim.models import DeviceRole, Platform, Region, Site
from netbox.views import generic
from tenancy.models import Tenant, TenantGroup
from utilities.forms import ConfirmationForm
from utilities.paginator import EnhancedPaginator, get_paginate_count
from utilities.utils import copy_safe_request, shallow_compare_dict
from utilities.views import (
BulkDeleteView, BulkEditView, BulkImportView, ObjectView, ObjectDeleteView, ObjectEditView, ObjectListView,
ContentTypePermissionRequiredMixin,
)
from utilities.views import ContentTypePermissionRequiredMixin
from virtualization.models import Cluster, ClusterGroup
from . import filters, forms, tables
from .choices import JobResultStatusChoices
@ -30,7 +28,7 @@ from .scripts import get_scripts, run_script
# Tags
#
class TagListView(ObjectListView):
class TagListView(generic.ObjectListView):
queryset = Tag.objects.annotate(
items=Count('extras_taggeditem_items')
).order_by(*Tag._meta.ordering)
@ -39,23 +37,23 @@ class TagListView(ObjectListView):
table = tables.TagTable
class TagEditView(ObjectEditView):
class TagEditView(generic.ObjectEditView):
queryset = Tag.objects.all()
model_form = forms.TagForm
template_name = 'extras/tag_edit.html'
class TagDeleteView(ObjectDeleteView):
class TagDeleteView(generic.ObjectDeleteView):
queryset = Tag.objects.all()
class TagBulkImportView(BulkImportView):
class TagBulkImportView(generic.BulkImportView):
queryset = Tag.objects.all()
model_form = forms.TagCSVForm
table = tables.TagTable
class TagBulkEditView(BulkEditView):
class TagBulkEditView(generic.BulkEditView):
queryset = Tag.objects.annotate(
items=Count('extras_taggeditem_items')
).order_by(*Tag._meta.ordering)
@ -63,7 +61,7 @@ class TagBulkEditView(BulkEditView):
form = forms.TagBulkEditForm
class TagBulkDeleteView(BulkDeleteView):
class TagBulkDeleteView(generic.BulkDeleteView):
queryset = Tag.objects.annotate(
items=Count('extras_taggeditem_items')
).order_by(*Tag._meta.ordering)
@ -74,7 +72,7 @@ class TagBulkDeleteView(BulkDeleteView):
# Config contexts
#
class ConfigContextListView(ObjectListView):
class ConfigContextListView(generic.ObjectListView):
queryset = ConfigContext.objects.all()
filterset = filters.ConfigContextFilterSet
filterset_form = forms.ConfigContextFilterForm
@ -82,7 +80,7 @@ class ConfigContextListView(ObjectListView):
action_buttons = ('add',)
class ConfigContextView(ObjectView):
class ConfigContextView(generic.ObjectView):
queryset = ConfigContext.objects.all()
def get(self, request, pk):
@ -116,29 +114,29 @@ class ConfigContextView(ObjectView):
})
class ConfigContextEditView(ObjectEditView):
class ConfigContextEditView(generic.ObjectEditView):
queryset = ConfigContext.objects.all()
model_form = forms.ConfigContextForm
template_name = 'extras/configcontext_edit.html'
class ConfigContextBulkEditView(BulkEditView):
class ConfigContextBulkEditView(generic.BulkEditView):
queryset = ConfigContext.objects.all()
filterset = filters.ConfigContextFilterSet
table = tables.ConfigContextTable
form = forms.ConfigContextBulkEditForm
class ConfigContextDeleteView(ObjectDeleteView):
class ConfigContextDeleteView(generic.ObjectDeleteView):
queryset = ConfigContext.objects.all()
class ConfigContextBulkDeleteView(BulkDeleteView):
class ConfigContextBulkDeleteView(generic.BulkDeleteView):
queryset = ConfigContext.objects.all()
table = tables.ConfigContextTable
class ObjectConfigContextView(ObjectView):
class ObjectConfigContextView(generic.ObjectView):
base_template = None
def get(self, request, pk):
@ -172,7 +170,7 @@ class ObjectConfigContextView(ObjectView):
# Change logging
#
class ObjectChangeListView(ObjectListView):
class ObjectChangeListView(generic.ObjectListView):
queryset = ObjectChange.objects.all()
filterset = filters.ObjectChangeFilterSet
filterset_form = forms.ObjectChangeFilterForm
@ -181,7 +179,7 @@ class ObjectChangeListView(ObjectListView):
action_buttons = ('export',)
class ObjectChangeView(ObjectView):
class ObjectChangeView(generic.ObjectView):
queryset = ObjectChange.objects.all()
def get(self, request, pk):
@ -283,7 +281,7 @@ class ObjectChangeLogView(View):
# Image attachments
#
class ImageAttachmentEditView(ObjectEditView):
class ImageAttachmentEditView(generic.ObjectEditView):
queryset = ImageAttachment.objects.all()
model_form = forms.ImageAttachmentForm
@ -298,7 +296,7 @@ class ImageAttachmentEditView(ObjectEditView):
return imageattachment.parent.get_absolute_url()
class ImageAttachmentDeleteView(ObjectDeleteView):
class ImageAttachmentDeleteView(generic.ObjectDeleteView):
queryset = ImageAttachment.objects.all()
def get_return_url(self, request, imageattachment):

View File

@ -1,20 +1,14 @@
import netaddr
from django.conf import settings
from django.db.models import Count, Prefetch
from django.db.models.expressions import RawSQL
from django.shortcuts import get_object_or_404, redirect, render
from django_tables2 import RequestConfig
from dcim.models import Device, Interface
from netbox.views import generic
from utilities.paginator import EnhancedPaginator, get_paginate_count
from utilities.utils import get_subquery
from utilities.views import (
BulkCreateView, BulkDeleteView, BulkEditView, BulkImportView, ObjectView, ObjectDeleteView, ObjectEditView,
ObjectListView,
)
from virtualization.models import VirtualMachine, VMInterface
from . import filters, forms, tables
from .choices import *
from .constants import *
from .models import Aggregate, IPAddress, Prefix, RIR, Role, RouteTarget, Service, VLAN, VLANGroup, VRF
from .utils import add_available_ipaddresses, add_available_prefixes, add_available_vlans
@ -24,14 +18,14 @@ from .utils import add_available_ipaddresses, add_available_prefixes, add_availa
# VRFs
#
class VRFListView(ObjectListView):
class VRFListView(generic.ObjectListView):
queryset = VRF.objects.all()
filterset = filters.VRFFilterSet
filterset_form = forms.VRFFilterForm
table = tables.VRFTable
class VRFView(ObjectView):
class VRFView(generic.ObjectView):
queryset = VRF.objects.all()
def get(self, request, pk):
@ -56,30 +50,30 @@ class VRFView(ObjectView):
})
class VRFEditView(ObjectEditView):
class VRFEditView(generic.ObjectEditView):
queryset = VRF.objects.all()
model_form = forms.VRFForm
template_name = 'ipam/vrf_edit.html'
class VRFDeleteView(ObjectDeleteView):
class VRFDeleteView(generic.ObjectDeleteView):
queryset = VRF.objects.all()
class VRFBulkImportView(BulkImportView):
class VRFBulkImportView(generic.BulkImportView):
queryset = VRF.objects.all()
model_form = forms.VRFCSVForm
table = tables.VRFTable
class VRFBulkEditView(BulkEditView):
class VRFBulkEditView(generic.BulkEditView):
queryset = VRF.objects.prefetch_related('tenant')
filterset = filters.VRFFilterSet
table = tables.VRFTable
form = forms.VRFBulkEditForm
class VRFBulkDeleteView(BulkDeleteView):
class VRFBulkDeleteView(generic.BulkDeleteView):
queryset = VRF.objects.prefetch_related('tenant')
filterset = filters.VRFFilterSet
table = tables.VRFTable
@ -89,14 +83,14 @@ class VRFBulkDeleteView(BulkDeleteView):
# Route targets
#
class RouteTargetListView(ObjectListView):
class RouteTargetListView(generic.ObjectListView):
queryset = RouteTarget.objects.all()
filterset = filters.RouteTargetFilterSet
filterset_form = forms.RouteTargetFilterForm
table = tables.RouteTargetTable
class RouteTargetView(ObjectView):
class RouteTargetView(generic.ObjectView):
queryset = RouteTarget.objects.all()
def get(self, request, pk):
@ -118,29 +112,29 @@ class RouteTargetView(ObjectView):
})
class RouteTargetEditView(ObjectEditView):
class RouteTargetEditView(generic.ObjectEditView):
queryset = RouteTarget.objects.all()
model_form = forms.RouteTargetForm
class RouteTargetDeleteView(ObjectDeleteView):
class RouteTargetDeleteView(generic.ObjectDeleteView):
queryset = RouteTarget.objects.all()
class RouteTargetBulkImportView(BulkImportView):
class RouteTargetBulkImportView(generic.BulkImportView):
queryset = RouteTarget.objects.all()
model_form = forms.RouteTargetCSVForm
table = tables.RouteTargetTable
class RouteTargetBulkEditView(BulkEditView):
class RouteTargetBulkEditView(generic.BulkEditView):
queryset = RouteTarget.objects.prefetch_related('tenant')
filterset = filters.RouteTargetFilterSet
table = tables.RouteTargetTable
form = forms.RouteTargetBulkEditForm
class RouteTargetBulkDeleteView(BulkDeleteView):
class RouteTargetBulkDeleteView(generic.BulkDeleteView):
queryset = RouteTarget.objects.prefetch_related('tenant')
filterset = filters.RouteTargetFilterSet
table = tables.RouteTargetTable
@ -150,7 +144,7 @@ class RouteTargetBulkDeleteView(BulkDeleteView):
# RIRs
#
class RIRListView(ObjectListView):
class RIRListView(generic.ObjectListView):
queryset = RIR.objects.annotate(aggregate_count=Count('aggregates')).order_by(*RIR._meta.ordering)
filterset = filters.RIRFilterSet
filterset_form = forms.RIRFilterForm
@ -158,22 +152,22 @@ class RIRListView(ObjectListView):
template_name = 'ipam/rir_list.html'
class RIREditView(ObjectEditView):
class RIREditView(generic.ObjectEditView):
queryset = RIR.objects.all()
model_form = forms.RIRForm
class RIRDeleteView(ObjectDeleteView):
class RIRDeleteView(generic.ObjectDeleteView):
queryset = RIR.objects.all()
class RIRBulkImportView(BulkImportView):
class RIRBulkImportView(generic.BulkImportView):
queryset = RIR.objects.all()
model_form = forms.RIRCSVForm
table = tables.RIRTable
class RIRBulkDeleteView(BulkDeleteView):
class RIRBulkDeleteView(generic.BulkDeleteView):
queryset = RIR.objects.annotate(aggregate_count=Count('aggregates')).order_by(*RIR._meta.ordering)
filterset = filters.RIRFilterSet
table = tables.RIRTable
@ -183,7 +177,7 @@ class RIRBulkDeleteView(BulkDeleteView):
# Aggregates
#
class AggregateListView(ObjectListView):
class AggregateListView(generic.ObjectListView):
queryset = Aggregate.objects.annotate(
child_count=RawSQL('SELECT COUNT(*) FROM ipam_prefix WHERE ipam_prefix.prefix <<= ipam_aggregate.prefix', ())
).order_by(*Aggregate._meta.ordering)
@ -209,7 +203,7 @@ class AggregateListView(ObjectListView):
}
class AggregateView(ObjectView):
class AggregateView(generic.ObjectView):
queryset = Aggregate.objects.all()
def get(self, request, pk):
@ -254,30 +248,30 @@ class AggregateView(ObjectView):
})
class AggregateEditView(ObjectEditView):
class AggregateEditView(generic.ObjectEditView):
queryset = Aggregate.objects.all()
model_form = forms.AggregateForm
template_name = 'ipam/aggregate_edit.html'
class AggregateDeleteView(ObjectDeleteView):
class AggregateDeleteView(generic.ObjectDeleteView):
queryset = Aggregate.objects.all()
class AggregateBulkImportView(BulkImportView):
class AggregateBulkImportView(generic.BulkImportView):
queryset = Aggregate.objects.all()
model_form = forms.AggregateCSVForm
table = tables.AggregateTable
class AggregateBulkEditView(BulkEditView):
class AggregateBulkEditView(generic.BulkEditView):
queryset = Aggregate.objects.prefetch_related('rir')
filterset = filters.AggregateFilterSet
table = tables.AggregateTable
form = forms.AggregateBulkEditForm
class AggregateBulkDeleteView(BulkDeleteView):
class AggregateBulkDeleteView(generic.BulkDeleteView):
queryset = Aggregate.objects.prefetch_related('rir')
filterset = filters.AggregateFilterSet
table = tables.AggregateTable
@ -287,7 +281,7 @@ class AggregateBulkDeleteView(BulkDeleteView):
# Prefix/VLAN roles
#
class RoleListView(ObjectListView):
class RoleListView(generic.ObjectListView):
queryset = Role.objects.annotate(
prefix_count=get_subquery(Prefix, 'role'),
vlan_count=get_subquery(VLAN, 'role')
@ -295,22 +289,22 @@ class RoleListView(ObjectListView):
table = tables.RoleTable
class RoleEditView(ObjectEditView):
class RoleEditView(generic.ObjectEditView):
queryset = Role.objects.all()
model_form = forms.RoleForm
class RoleDeleteView(ObjectDeleteView):
class RoleDeleteView(generic.ObjectDeleteView):
queryset = Role.objects.all()
class RoleBulkImportView(BulkImportView):
class RoleBulkImportView(generic.BulkImportView):
queryset = Role.objects.all()
model_form = forms.RoleCSVForm
table = tables.RoleTable
class RoleBulkDeleteView(BulkDeleteView):
class RoleBulkDeleteView(generic.BulkDeleteView):
queryset = Role.objects.all()
table = tables.RoleTable
@ -319,7 +313,7 @@ class RoleBulkDeleteView(BulkDeleteView):
# Prefixes
#
class PrefixListView(ObjectListView):
class PrefixListView(generic.ObjectListView):
queryset = Prefix.objects.annotate_tree()
filterset = filters.PrefixFilterSet
filterset_form = forms.PrefixFilterForm
@ -327,7 +321,7 @@ class PrefixListView(ObjectListView):
template_name = 'ipam/prefix_list.html'
class PrefixView(ObjectView):
class PrefixView(generic.ObjectView):
queryset = Prefix.objects.prefetch_related('vrf', 'site__region', 'tenant__group', 'vlan__group', 'role')
def get(self, request, pk):
@ -371,7 +365,7 @@ class PrefixView(ObjectView):
})
class PrefixPrefixesView(ObjectView):
class PrefixPrefixesView(generic.ObjectView):
queryset = Prefix.objects.all()
def get(self, request, pk):
@ -415,7 +409,7 @@ class PrefixPrefixesView(ObjectView):
})
class PrefixIPAddressesView(ObjectView):
class PrefixIPAddressesView(generic.ObjectView):
queryset = Prefix.objects.all()
def get(self, request, pk):
@ -459,31 +453,31 @@ class PrefixIPAddressesView(ObjectView):
})
class PrefixEditView(ObjectEditView):
class PrefixEditView(generic.ObjectEditView):
queryset = Prefix.objects.all()
model_form = forms.PrefixForm
template_name = 'ipam/prefix_edit.html'
class PrefixDeleteView(ObjectDeleteView):
class PrefixDeleteView(generic.ObjectDeleteView):
queryset = Prefix.objects.all()
template_name = 'ipam/prefix_delete.html'
class PrefixBulkImportView(BulkImportView):
class PrefixBulkImportView(generic.BulkImportView):
queryset = Prefix.objects.all()
model_form = forms.PrefixCSVForm
table = tables.PrefixTable
class PrefixBulkEditView(BulkEditView):
class PrefixBulkEditView(generic.BulkEditView):
queryset = Prefix.objects.prefetch_related('site', 'vrf__tenant', 'tenant', 'vlan', 'role')
filterset = filters.PrefixFilterSet
table = tables.PrefixTable
form = forms.PrefixBulkEditForm
class PrefixBulkDeleteView(BulkDeleteView):
class PrefixBulkDeleteView(generic.BulkDeleteView):
queryset = Prefix.objects.prefetch_related('site', 'vrf__tenant', 'tenant', 'vlan', 'role')
filterset = filters.PrefixFilterSet
table = tables.PrefixTable
@ -493,14 +487,14 @@ class PrefixBulkDeleteView(BulkDeleteView):
# IP addresses
#
class IPAddressListView(ObjectListView):
class IPAddressListView(generic.ObjectListView):
queryset = IPAddress.objects.all()
filterset = filters.IPAddressFilterSet
filterset_form = forms.IPAddressFilterForm
table = tables.IPAddressDetailTable
class IPAddressView(ObjectView):
class IPAddressView(generic.ObjectView):
queryset = IPAddress.objects.prefetch_related('vrf__tenant', 'tenant')
def get(self, request, pk):
@ -553,7 +547,7 @@ class IPAddressView(ObjectView):
})
class IPAddressEditView(ObjectEditView):
class IPAddressEditView(generic.ObjectEditView):
queryset = IPAddress.objects.all()
model_form = forms.IPAddressForm
template_name = 'ipam/ipaddress_edit.html'
@ -575,7 +569,7 @@ class IPAddressEditView(ObjectEditView):
return obj
class IPAddressAssignView(ObjectView):
class IPAddressAssignView(generic.ObjectView):
"""
Search for IPAddresses to be assigned to an Interface.
"""
@ -615,11 +609,11 @@ class IPAddressAssignView(ObjectView):
})
class IPAddressDeleteView(ObjectDeleteView):
class IPAddressDeleteView(generic.ObjectDeleteView):
queryset = IPAddress.objects.all()
class IPAddressBulkCreateView(BulkCreateView):
class IPAddressBulkCreateView(generic.BulkCreateView):
queryset = IPAddress.objects.all()
form = forms.IPAddressBulkCreateForm
model_form = forms.IPAddressBulkAddForm
@ -627,20 +621,20 @@ class IPAddressBulkCreateView(BulkCreateView):
template_name = 'ipam/ipaddress_bulk_add.html'
class IPAddressBulkImportView(BulkImportView):
class IPAddressBulkImportView(generic.BulkImportView):
queryset = IPAddress.objects.all()
model_form = forms.IPAddressCSVForm
table = tables.IPAddressTable
class IPAddressBulkEditView(BulkEditView):
class IPAddressBulkEditView(generic.BulkEditView):
queryset = IPAddress.objects.prefetch_related('vrf__tenant', 'tenant')
filterset = filters.IPAddressFilterSet
table = tables.IPAddressTable
form = forms.IPAddressBulkEditForm
class IPAddressBulkDeleteView(BulkDeleteView):
class IPAddressBulkDeleteView(generic.BulkDeleteView):
queryset = IPAddress.objects.prefetch_related('vrf__tenant', 'tenant')
filterset = filters.IPAddressFilterSet
table = tables.IPAddressTable
@ -650,7 +644,7 @@ class IPAddressBulkDeleteView(BulkDeleteView):
# VLAN groups
#
class VLANGroupListView(ObjectListView):
class VLANGroupListView(generic.ObjectListView):
queryset = VLANGroup.objects.annotate(
vlan_count=Count('vlans')
).order_by(*VLANGroup._meta.ordering)
@ -659,22 +653,22 @@ class VLANGroupListView(ObjectListView):
table = tables.VLANGroupTable
class VLANGroupEditView(ObjectEditView):
class VLANGroupEditView(generic.ObjectEditView):
queryset = VLANGroup.objects.all()
model_form = forms.VLANGroupForm
class VLANGroupDeleteView(ObjectDeleteView):
class VLANGroupDeleteView(generic.ObjectDeleteView):
queryset = VLANGroup.objects.all()
class VLANGroupBulkImportView(BulkImportView):
class VLANGroupBulkImportView(generic.BulkImportView):
queryset = VLANGroup.objects.all()
model_form = forms.VLANGroupCSVForm
table = tables.VLANGroupTable
class VLANGroupBulkDeleteView(BulkDeleteView):
class VLANGroupBulkDeleteView(generic.BulkDeleteView):
queryset = VLANGroup.objects.prefetch_related('site').annotate(
vlan_count=Count('vlans')
).order_by(*VLANGroup._meta.ordering)
@ -682,7 +676,7 @@ class VLANGroupBulkDeleteView(BulkDeleteView):
table = tables.VLANGroupTable
class VLANGroupVLANsView(ObjectView):
class VLANGroupVLANsView(generic.ObjectView):
queryset = VLANGroup.objects.all()
def get(self, request, pk):
@ -725,14 +719,14 @@ class VLANGroupVLANsView(ObjectView):
# VLANs
#
class VLANListView(ObjectListView):
class VLANListView(generic.ObjectListView):
queryset = VLAN.objects.all()
filterset = filters.VLANFilterSet
filterset_form = forms.VLANFilterForm
table = tables.VLANDetailTable
class VLANView(ObjectView):
class VLANView(generic.ObjectView):
queryset = VLAN.objects.prefetch_related('site__region', 'tenant__group', 'role')
def get(self, request, pk):
@ -750,7 +744,7 @@ class VLANView(ObjectView):
})
class VLANInterfacesView(ObjectView):
class VLANInterfacesView(generic.ObjectView):
queryset = VLAN.objects.all()
def get(self, request, pk):
@ -771,7 +765,7 @@ class VLANInterfacesView(ObjectView):
})
class VLANVMInterfacesView(ObjectView):
class VLANVMInterfacesView(generic.ObjectView):
queryset = VLAN.objects.all()
def get(self, request, pk):
@ -792,30 +786,30 @@ class VLANVMInterfacesView(ObjectView):
})
class VLANEditView(ObjectEditView):
class VLANEditView(generic.ObjectEditView):
queryset = VLAN.objects.all()
model_form = forms.VLANForm
template_name = 'ipam/vlan_edit.html'
class VLANDeleteView(ObjectDeleteView):
class VLANDeleteView(generic.ObjectDeleteView):
queryset = VLAN.objects.all()
class VLANBulkImportView(BulkImportView):
class VLANBulkImportView(generic.BulkImportView):
queryset = VLAN.objects.all()
model_form = forms.VLANCSVForm
table = tables.VLANTable
class VLANBulkEditView(BulkEditView):
class VLANBulkEditView(generic.BulkEditView):
queryset = VLAN.objects.prefetch_related('site', 'group', 'tenant', 'role')
filterset = filters.VLANFilterSet
table = tables.VLANTable
form = forms.VLANBulkEditForm
class VLANBulkDeleteView(BulkDeleteView):
class VLANBulkDeleteView(generic.BulkDeleteView):
queryset = VLAN.objects.prefetch_related('site', 'group', 'tenant', 'role')
filterset = filters.VLANFilterSet
table = tables.VLANTable
@ -825,7 +819,7 @@ class VLANBulkDeleteView(BulkDeleteView):
# Services
#
class ServiceListView(ObjectListView):
class ServiceListView(generic.ObjectListView):
queryset = Service.objects.all()
filterset = filters.ServiceFilterSet
filterset_form = forms.ServiceFilterForm
@ -833,7 +827,7 @@ class ServiceListView(ObjectListView):
action_buttons = ('export',)
class ServiceView(ObjectView):
class ServiceView(generic.ObjectView):
queryset = Service.objects.prefetch_related('ipaddresses')
def get(self, request, pk):
@ -845,7 +839,7 @@ class ServiceView(ObjectView):
})
class ServiceEditView(ObjectEditView):
class ServiceEditView(generic.ObjectEditView):
queryset = Service.objects.prefetch_related('ipaddresses')
model_form = forms.ServiceForm
template_name = 'ipam/service_edit.html'
@ -864,24 +858,24 @@ class ServiceEditView(ObjectEditView):
return obj
class ServiceBulkImportView(BulkImportView):
class ServiceBulkImportView(generic.BulkImportView):
queryset = Service.objects.all()
model_form = forms.ServiceCSVForm
table = tables.ServiceTable
class ServiceDeleteView(ObjectDeleteView):
class ServiceDeleteView(generic.ObjectDeleteView):
queryset = Service.objects.all()
class ServiceBulkEditView(BulkEditView):
class ServiceBulkEditView(generic.BulkEditView):
queryset = Service.objects.prefetch_related('device', 'virtual_machine')
filterset = filters.ServiceFilterSet
table = tables.ServiceTable
form = forms.ServiceBulkEditForm
class ServiceBulkDeleteView(BulkDeleteView):
class ServiceBulkDeleteView(generic.BulkDeleteView):
queryset = Service.objects.prefetch_related('device', 'virtual_machine')
filterset = filters.ServiceFilterSet
table = tables.ServiceTable

View File

@ -8,8 +8,8 @@ from django.http import Http404, HttpResponseRedirect
from django.urls import reverse
from extras.context_managers import change_logging
from netbox.views import server_error
from utilities.api import is_api_request, rest_api_server_error
from utilities.views import server_error
class LoginRequiredMiddleware(object):

View File

@ -94,4 +94,4 @@ urlpatterns = [
path('{}'.format(settings.BASE_PATH), include(_patterns))
]
handler500 = 'utilities.views.server_error'
handler500 = 'netbox.views.server_error'

View File

@ -1,22 +1,32 @@
import platform
import sys
from django.conf import settings
from django.contrib.contenttypes.models import ContentType
from django.db.models import F
from django.http import HttpResponseServerError
from django.shortcuts import render
from django.template import loader
from django.template.exceptions import TemplateDoesNotExist
from django.urls import reverse
from django.views.decorators.csrf import requires_csrf_token
from django.views.defaults import ERROR_500_TEMPLATE_NAME
from django.views.generic import View
from packaging import version
from circuits.models import Circuit, Provider
from dcim.models import Cable, ConsolePort, Device, DeviceType, Interface, PowerPanel, PowerFeed, PowerPort, Rack, Site
from dcim.models import (
Cable, ConsolePort, Device, DeviceType, Interface, PowerPanel, PowerFeed, PowerPort, Rack, Site,
)
from extras.choices import JobResultStatusChoices
from extras.models import ObjectChange, JobResult
from ipam.models import Aggregate, IPAddress, Prefix, VLAN, VRF
from netbox.constants import SEARCH_MAX_RESULTS, SEARCH_TYPES
from netbox.forms import SearchForm
from netbox.releases import get_latest_release
from secrets.models import Secret
from tenancy.models import Tenant
from virtualization.models import Cluster, VirtualMachine
from .constants import SEARCH_MAX_RESULTS, SEARCH_TYPES
from .forms import SearchForm
class HomeView(View):
@ -157,3 +167,22 @@ class StaticMediaFailureView(View):
return render(request, 'media_failure.html', {
'filename': request.GET.get('filename')
})
@requires_csrf_token
def server_error(request, template_name=ERROR_500_TEMPLATE_NAME):
"""
Custom 500 handler to provide additional context when rendering 500.html.
"""
try:
template = loader.get_template(template_name)
except TemplateDoesNotExist:
return HttpResponseServerError('<h1>Server Error (500)</h1>', content_type='text/html')
type_, error, traceback = sys.exc_info()
return HttpResponseServerError(template.render({
'error': error,
'exception': str(type_),
'netbox_version': settings.VERSION,
'python_version': platform.python_version(),
}))

File diff suppressed because it is too large Load Diff

View File

@ -7,9 +7,7 @@ from django.shortcuts import get_object_or_404, redirect, render
from django.utils.html import escape
from django.utils.safestring import mark_safe
from utilities.views import (
BulkDeleteView, BulkEditView, BulkImportView, ObjectView, ObjectDeleteView, ObjectEditView, ObjectListView,
)
from netbox.views import generic
from . import filters, forms, tables
from .models import SecretRole, Secret, SessionKey, UserKey
@ -28,27 +26,27 @@ def get_session_key(request):
# Secret roles
#
class SecretRoleListView(ObjectListView):
class SecretRoleListView(generic.ObjectListView):
queryset = SecretRole.objects.annotate(secret_count=Count('secrets')).order_by(*SecretRole._meta.ordering)
table = tables.SecretRoleTable
class SecretRoleEditView(ObjectEditView):
class SecretRoleEditView(generic.ObjectEditView):
queryset = SecretRole.objects.all()
model_form = forms.SecretRoleForm
class SecretRoleDeleteView(ObjectDeleteView):
class SecretRoleDeleteView(generic.ObjectDeleteView):
queryset = SecretRole.objects.all()
class SecretRoleBulkImportView(BulkImportView):
class SecretRoleBulkImportView(generic.BulkImportView):
queryset = SecretRole.objects.all()
model_form = forms.SecretRoleCSVForm
table = tables.SecretRoleTable
class SecretRoleBulkDeleteView(BulkDeleteView):
class SecretRoleBulkDeleteView(generic.BulkDeleteView):
queryset = SecretRole.objects.annotate(secret_count=Count('secrets')).order_by(*SecretRole._meta.ordering)
table = tables.SecretRoleTable
@ -57,7 +55,7 @@ class SecretRoleBulkDeleteView(BulkDeleteView):
# Secrets
#
class SecretListView(ObjectListView):
class SecretListView(generic.ObjectListView):
queryset = Secret.objects.all()
filterset = filters.SecretFilterSet
filterset_form = forms.SecretFilterForm
@ -65,7 +63,7 @@ class SecretListView(ObjectListView):
action_buttons = ('import', 'export')
class SecretView(ObjectView):
class SecretView(generic.ObjectView):
queryset = Secret.objects.all()
def get(self, request, pk):
@ -77,7 +75,7 @@ class SecretView(ObjectView):
})
class SecretEditView(ObjectEditView):
class SecretEditView(generic.ObjectEditView):
queryset = Secret.objects.all()
model_form = forms.SecretForm
template_name = 'secrets/secret_edit.html'
@ -146,11 +144,11 @@ class SecretEditView(ObjectEditView):
})
class SecretDeleteView(ObjectDeleteView):
class SecretDeleteView(generic.ObjectDeleteView):
queryset = Secret.objects.all()
class SecretBulkImportView(BulkImportView):
class SecretBulkImportView(generic.BulkImportView):
queryset = Secret.objects.all()
model_form = forms.SecretCSVForm
table = tables.SecretTable
@ -197,14 +195,14 @@ class SecretBulkImportView(BulkImportView):
})
class SecretBulkEditView(BulkEditView):
class SecretBulkEditView(generic.BulkEditView):
queryset = Secret.objects.prefetch_related('role')
filterset = filters.SecretFilterSet
table = tables.SecretTable
form = forms.SecretBulkEditForm
class SecretBulkDeleteView(BulkDeleteView):
class SecretBulkDeleteView(generic.BulkDeleteView):
queryset = Secret.objects.prefetch_related('role')
filterset = filters.SecretFilterSet
table = tables.SecretTable

View File

@ -1,12 +1,9 @@
from django.db.models import Count
from django.shortcuts import get_object_or_404, render
from circuits.models import Circuit
from dcim.models import Site, Rack, Device, RackReservation
from ipam.models import IPAddress, Prefix, VLAN, VRF
from utilities.views import (
BulkDeleteView, BulkEditView, BulkImportView, ObjectView, ObjectDeleteView, ObjectEditView, ObjectListView,
)
from netbox.views import generic
from virtualization.models import VirtualMachine, Cluster
from . import filters, forms, tables
from .models import Tenant, TenantGroup
@ -16,7 +13,7 @@ from .models import Tenant, TenantGroup
# Tenant groups
#
class TenantGroupListView(ObjectListView):
class TenantGroupListView(generic.ObjectListView):
queryset = TenantGroup.objects.add_related_count(
TenantGroup.objects.all(),
Tenant,
@ -27,22 +24,22 @@ class TenantGroupListView(ObjectListView):
table = tables.TenantGroupTable
class TenantGroupEditView(ObjectEditView):
class TenantGroupEditView(generic.ObjectEditView):
queryset = TenantGroup.objects.all()
model_form = forms.TenantGroupForm
class TenantGroupDeleteView(ObjectDeleteView):
class TenantGroupDeleteView(generic.ObjectDeleteView):
queryset = TenantGroup.objects.all()
class TenantGroupBulkImportView(BulkImportView):
class TenantGroupBulkImportView(generic.BulkImportView):
queryset = TenantGroup.objects.all()
model_form = forms.TenantGroupCSVForm
table = tables.TenantGroupTable
class TenantGroupBulkDeleteView(BulkDeleteView):
class TenantGroupBulkDeleteView(generic.BulkDeleteView):
queryset = TenantGroup.objects.add_related_count(
TenantGroup.objects.all(),
Tenant,
@ -57,14 +54,14 @@ class TenantGroupBulkDeleteView(BulkDeleteView):
# Tenants
#
class TenantListView(ObjectListView):
class TenantListView(generic.ObjectListView):
queryset = Tenant.objects.all()
filterset = filters.TenantFilterSet
filterset_form = forms.TenantFilterForm
table = tables.TenantTable
class TenantView(ObjectView):
class TenantView(generic.ObjectView):
queryset = Tenant.objects.prefetch_related('group')
def get(self, request, slug):
@ -90,30 +87,30 @@ class TenantView(ObjectView):
})
class TenantEditView(ObjectEditView):
class TenantEditView(generic.ObjectEditView):
queryset = Tenant.objects.all()
model_form = forms.TenantForm
template_name = 'tenancy/tenant_edit.html'
class TenantDeleteView(ObjectDeleteView):
class TenantDeleteView(generic.ObjectDeleteView):
queryset = Tenant.objects.all()
class TenantBulkImportView(BulkImportView):
class TenantBulkImportView(generic.BulkImportView):
queryset = Tenant.objects.all()
model_form = forms.TenantCSVForm
table = tables.TenantTable
class TenantBulkEditView(BulkEditView):
class TenantBulkEditView(generic.BulkEditView):
queryset = Tenant.objects.prefetch_related('group')
filterset = filters.TenantFilterSet
table = tables.TenantTable
form = forms.TenantBulkEditForm
class TenantBulkDeleteView(BulkDeleteView):
class TenantBulkDeleteView(generic.BulkDeleteView):
queryset = Tenant.objects.prefetch_related('group')
filterset = filters.TenantFilterSet
table = tables.TenantTable

File diff suppressed because it is too large Load Diff

View File

@ -9,12 +9,9 @@ from dcim.tables import DeviceTable
from extras.views import ObjectConfigContextView
from ipam.models import IPAddress, Service
from ipam.tables import InterfaceIPAddressTable, InterfaceVLANTable
from netbox.views import generic
from secrets.models import Secret
from utilities.utils import get_subquery
from utilities.views import (
BulkComponentCreateView, BulkDeleteView, BulkEditView, BulkImportView, BulkRenameView, ComponentCreateView,
ObjectView, ObjectDeleteView, ObjectEditView, ObjectListView,
)
from . import filters, forms, tables
from .models import Cluster, ClusterGroup, ClusterType, VirtualMachine, VMInterface
@ -23,27 +20,27 @@ from .models import Cluster, ClusterGroup, ClusterType, VirtualMachine, VMInterf
# Cluster types
#
class ClusterTypeListView(ObjectListView):
class ClusterTypeListView(generic.ObjectListView):
queryset = ClusterType.objects.annotate(cluster_count=Count('clusters')).order_by(*ClusterType._meta.ordering)
table = tables.ClusterTypeTable
class ClusterTypeEditView(ObjectEditView):
class ClusterTypeEditView(generic.ObjectEditView):
queryset = ClusterType.objects.all()
model_form = forms.ClusterTypeForm
class ClusterTypeDeleteView(ObjectDeleteView):
class ClusterTypeDeleteView(generic.ObjectDeleteView):
queryset = ClusterType.objects.all()
class ClusterTypeBulkImportView(BulkImportView):
class ClusterTypeBulkImportView(generic.BulkImportView):
queryset = ClusterType.objects.all()
model_form = forms.ClusterTypeCSVForm
table = tables.ClusterTypeTable
class ClusterTypeBulkDeleteView(BulkDeleteView):
class ClusterTypeBulkDeleteView(generic.BulkDeleteView):
queryset = ClusterType.objects.annotate(cluster_count=Count('clusters')).order_by(*ClusterType._meta.ordering)
table = tables.ClusterTypeTable
@ -52,27 +49,27 @@ class ClusterTypeBulkDeleteView(BulkDeleteView):
# Cluster groups
#
class ClusterGroupListView(ObjectListView):
class ClusterGroupListView(generic.ObjectListView):
queryset = ClusterGroup.objects.annotate(cluster_count=Count('clusters')).order_by(*ClusterGroup._meta.ordering)
table = tables.ClusterGroupTable
class ClusterGroupEditView(ObjectEditView):
class ClusterGroupEditView(generic.ObjectEditView):
queryset = ClusterGroup.objects.all()
model_form = forms.ClusterGroupForm
class ClusterGroupDeleteView(ObjectDeleteView):
class ClusterGroupDeleteView(generic.ObjectDeleteView):
queryset = ClusterGroup.objects.all()
class ClusterGroupBulkImportView(BulkImportView):
class ClusterGroupBulkImportView(generic.BulkImportView):
queryset = ClusterGroup.objects.all()
model_form = forms.ClusterGroupCSVForm
table = tables.ClusterGroupTable
class ClusterGroupBulkDeleteView(BulkDeleteView):
class ClusterGroupBulkDeleteView(generic.BulkDeleteView):
queryset = ClusterGroup.objects.annotate(cluster_count=Count('clusters')).order_by(*ClusterGroup._meta.ordering)
table = tables.ClusterGroupTable
@ -81,7 +78,7 @@ class ClusterGroupBulkDeleteView(BulkDeleteView):
# Clusters
#
class ClusterListView(ObjectListView):
class ClusterListView(generic.ObjectListView):
permission_required = 'virtualization.view_cluster'
queryset = Cluster.objects.annotate(
device_count=get_subquery(Device, 'cluster'),
@ -92,7 +89,7 @@ class ClusterListView(ObjectListView):
filterset_form = forms.ClusterFilterForm
class ClusterView(ObjectView):
class ClusterView(generic.ObjectView):
queryset = Cluster.objects.all()
def get(self, request, pk):
@ -114,36 +111,36 @@ class ClusterView(ObjectView):
})
class ClusterEditView(ObjectEditView):
class ClusterEditView(generic.ObjectEditView):
template_name = 'virtualization/cluster_edit.html'
queryset = Cluster.objects.all()
model_form = forms.ClusterForm
class ClusterDeleteView(ObjectDeleteView):
class ClusterDeleteView(generic.ObjectDeleteView):
queryset = Cluster.objects.all()
class ClusterBulkImportView(BulkImportView):
class ClusterBulkImportView(generic.BulkImportView):
queryset = Cluster.objects.all()
model_form = forms.ClusterCSVForm
table = tables.ClusterTable
class ClusterBulkEditView(BulkEditView):
class ClusterBulkEditView(generic.BulkEditView):
queryset = Cluster.objects.prefetch_related('type', 'group', 'site')
filterset = filters.ClusterFilterSet
table = tables.ClusterTable
form = forms.ClusterBulkEditForm
class ClusterBulkDeleteView(BulkDeleteView):
class ClusterBulkDeleteView(generic.BulkDeleteView):
queryset = Cluster.objects.prefetch_related('type', 'group', 'site')
filterset = filters.ClusterFilterSet
table = tables.ClusterTable
class ClusterAddDevicesView(ObjectEditView):
class ClusterAddDevicesView(generic.ObjectEditView):
queryset = Cluster.objects.all()
form = forms.ClusterAddDevicesForm
template_name = 'virtualization/cluster_add_devices.html'
@ -184,7 +181,7 @@ class ClusterAddDevicesView(ObjectEditView):
})
class ClusterRemoveDevicesView(ObjectEditView):
class ClusterRemoveDevicesView(generic.ObjectEditView):
queryset = Cluster.objects.all()
form = forms.ClusterRemoveDevicesForm
template_name = 'utilities/obj_bulk_remove.html'
@ -229,7 +226,7 @@ class ClusterRemoveDevicesView(ObjectEditView):
# Virtual machines
#
class VirtualMachineListView(ObjectListView):
class VirtualMachineListView(generic.ObjectListView):
queryset = VirtualMachine.objects.all()
filterset = filters.VirtualMachineFilterSet
filterset_form = forms.VirtualMachineFilterForm
@ -237,7 +234,7 @@ class VirtualMachineListView(ObjectListView):
template_name = 'virtualization/virtualmachine_list.html'
class VirtualMachineView(ObjectView):
class VirtualMachineView(generic.ObjectView):
queryset = VirtualMachine.objects.prefetch_related('tenant__group')
def get(self, request, pk):
@ -277,30 +274,30 @@ class VirtualMachineConfigContextView(ObjectConfigContextView):
base_template = 'virtualization/virtualmachine.html'
class VirtualMachineEditView(ObjectEditView):
class VirtualMachineEditView(generic.ObjectEditView):
queryset = VirtualMachine.objects.all()
model_form = forms.VirtualMachineForm
template_name = 'virtualization/virtualmachine_edit.html'
class VirtualMachineDeleteView(ObjectDeleteView):
class VirtualMachineDeleteView(generic.ObjectDeleteView):
queryset = VirtualMachine.objects.all()
class VirtualMachineBulkImportView(BulkImportView):
class VirtualMachineBulkImportView(generic.BulkImportView):
queryset = VirtualMachine.objects.all()
model_form = forms.VirtualMachineCSVForm
table = tables.VirtualMachineTable
class VirtualMachineBulkEditView(BulkEditView):
class VirtualMachineBulkEditView(generic.BulkEditView):
queryset = VirtualMachine.objects.prefetch_related('cluster', 'tenant', 'role')
filterset = filters.VirtualMachineFilterSet
table = tables.VirtualMachineTable
form = forms.VirtualMachineBulkEditForm
class VirtualMachineBulkDeleteView(BulkDeleteView):
class VirtualMachineBulkDeleteView(generic.BulkDeleteView):
queryset = VirtualMachine.objects.prefetch_related('cluster', 'tenant', 'role')
filterset = filters.VirtualMachineFilterSet
table = tables.VirtualMachineTable
@ -310,7 +307,7 @@ class VirtualMachineBulkDeleteView(BulkDeleteView):
# VM interfaces
#
class VMInterfaceListView(ObjectListView):
class VMInterfaceListView(generic.ObjectListView):
queryset = VMInterface.objects.all()
filterset = filters.VMInterfaceFilterSet
filterset_form = forms.VMInterfaceFilterForm
@ -318,7 +315,7 @@ class VMInterfaceListView(ObjectListView):
action_buttons = ('export',)
class VMInterfaceView(ObjectView):
class VMInterfaceView(generic.ObjectView):
queryset = VMInterface.objects.all()
def get(self, request, pk):
@ -353,41 +350,41 @@ class VMInterfaceView(ObjectView):
# TODO: This should not use ComponentCreateView
class VMInterfaceCreateView(ComponentCreateView):
class VMInterfaceCreateView(generic.ComponentCreateView):
queryset = VMInterface.objects.all()
form = forms.VMInterfaceCreateForm
model_form = forms.VMInterfaceForm
template_name = 'virtualization/virtualmachine_component_add.html'
class VMInterfaceEditView(ObjectEditView):
class VMInterfaceEditView(generic.ObjectEditView):
queryset = VMInterface.objects.all()
model_form = forms.VMInterfaceForm
template_name = 'virtualization/vminterface_edit.html'
class VMInterfaceDeleteView(ObjectDeleteView):
class VMInterfaceDeleteView(generic.ObjectDeleteView):
queryset = VMInterface.objects.all()
class VMInterfaceBulkImportView(BulkImportView):
class VMInterfaceBulkImportView(generic.BulkImportView):
queryset = VMInterface.objects.all()
model_form = forms.VMInterfaceCSVForm
table = tables.VMInterfaceTable
class VMInterfaceBulkEditView(BulkEditView):
class VMInterfaceBulkEditView(generic.BulkEditView):
queryset = VMInterface.objects.all()
table = tables.VMInterfaceTable
form = forms.VMInterfaceBulkEditForm
class VMInterfaceBulkRenameView(BulkRenameView):
class VMInterfaceBulkRenameView(generic.BulkRenameView):
queryset = VMInterface.objects.all()
form = forms.VMInterfaceBulkRenameForm
class VMInterfaceBulkDeleteView(BulkDeleteView):
class VMInterfaceBulkDeleteView(generic.BulkDeleteView):
queryset = VMInterface.objects.all()
table = tables.VMInterfaceTable
@ -396,7 +393,7 @@ class VMInterfaceBulkDeleteView(BulkDeleteView):
# Bulk Device component creation
#
class VirtualMachineBulkAddInterfaceView(BulkComponentCreateView):
class VirtualMachineBulkAddInterfaceView(generic.BulkComponentCreateView):
parent_model = VirtualMachine
parent_field = 'virtual_machine'
form = forms.VMInterfaceBulkCreateForm