mirror of
https://github.com/netbox-community/netbox.git
synced 2024-05-10 07:54:54 +00:00
Introduce paginate_table() utility to simplify table pagination
This commit is contained in:
@ -2,11 +2,10 @@ from django.contrib import messages
|
|||||||
from django.db import transaction
|
from django.db import transaction
|
||||||
from django.db.models import Q
|
from django.db.models import Q
|
||||||
from django.shortcuts import get_object_or_404, redirect, render
|
from django.shortcuts import get_object_or_404, redirect, render
|
||||||
from django_tables2 import RequestConfig
|
|
||||||
|
|
||||||
from netbox.views import generic
|
from netbox.views import generic
|
||||||
from utilities.forms import ConfirmationForm
|
from utilities.forms import ConfirmationForm
|
||||||
from utilities.paginator import EnhancedPaginator, get_paginate_count
|
from utilities.tables import paginate_table
|
||||||
from utilities.utils import count_related
|
from utilities.utils import count_related
|
||||||
from . import filters, forms, tables
|
from . import filters, forms, tables
|
||||||
from .choices import CircuitTerminationSideChoices
|
from .choices import CircuitTerminationSideChoices
|
||||||
@ -38,12 +37,7 @@ class ProviderView(generic.ObjectView):
|
|||||||
|
|
||||||
circuits_table = tables.CircuitTable(circuits)
|
circuits_table = tables.CircuitTable(circuits)
|
||||||
circuits_table.columns.hide('provider')
|
circuits_table.columns.hide('provider')
|
||||||
|
paginate_table(circuits_table, request)
|
||||||
paginate = {
|
|
||||||
'paginator_class': EnhancedPaginator,
|
|
||||||
'per_page': get_paginate_count(request)
|
|
||||||
}
|
|
||||||
RequestConfig(request, paginate).configure(circuits_table)
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
'circuits_table': circuits_table,
|
'circuits_table': circuits_table,
|
||||||
@ -107,12 +101,7 @@ class CloudView(generic.ObjectView):
|
|||||||
circuits_table = tables.CircuitTable(circuits)
|
circuits_table = tables.CircuitTable(circuits)
|
||||||
circuits_table.columns.hide('termination_a')
|
circuits_table.columns.hide('termination_a')
|
||||||
circuits_table.columns.hide('termination_z')
|
circuits_table.columns.hide('termination_z')
|
||||||
|
paginate_table(circuits_table, request)
|
||||||
paginate = {
|
|
||||||
'paginator_class': EnhancedPaginator,
|
|
||||||
'per_page': get_paginate_count(request)
|
|
||||||
}
|
|
||||||
RequestConfig(request, paginate).configure(circuits_table)
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
'circuits_table': circuits_table,
|
'circuits_table': circuits_table,
|
||||||
|
@ -7,12 +7,11 @@ from django.shortcuts import get_object_or_404, redirect, render
|
|||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
from django.views.generic import View
|
from django.views.generic import View
|
||||||
from django_rq.queues import get_connection
|
from django_rq.queues import get_connection
|
||||||
from django_tables2 import RequestConfig
|
|
||||||
from rq import Worker
|
from rq import Worker
|
||||||
|
|
||||||
from netbox.views import generic
|
from netbox.views import generic
|
||||||
from utilities.forms import ConfirmationForm
|
from utilities.forms import ConfirmationForm
|
||||||
from utilities.paginator import EnhancedPaginator, get_paginate_count
|
from utilities.tables import paginate_table
|
||||||
from utilities.utils import copy_safe_request, count_related, shallow_compare_dict
|
from utilities.utils import copy_safe_request, count_related, shallow_compare_dict
|
||||||
from utilities.views import ContentTypePermissionRequiredMixin
|
from utilities.views import ContentTypePermissionRequiredMixin
|
||||||
from . import filters, forms, tables
|
from . import filters, forms, tables
|
||||||
@ -230,13 +229,7 @@ class ObjectChangeLogView(View):
|
|||||||
data=objectchanges,
|
data=objectchanges,
|
||||||
orderable=False
|
orderable=False
|
||||||
)
|
)
|
||||||
|
paginate_table(objectchanges_table, request)
|
||||||
# Apply the request context
|
|
||||||
paginate = {
|
|
||||||
'paginator_class': EnhancedPaginator,
|
|
||||||
'per_page': get_paginate_count(request)
|
|
||||||
}
|
|
||||||
RequestConfig(request, paginate).configure(objectchanges_table)
|
|
||||||
|
|
||||||
# Default to using "<app>/<model>.html" as the template, if it exists. Otherwise,
|
# Default to using "<app>/<model>.html" as the template, if it exists. Otherwise,
|
||||||
# fall back to using base.html.
|
# fall back to using base.html.
|
||||||
@ -359,13 +352,7 @@ class ObjectJournalView(View):
|
|||||||
data=journalentries,
|
data=journalentries,
|
||||||
orderable=False
|
orderable=False
|
||||||
)
|
)
|
||||||
|
paginate_table(journalentry_table, request)
|
||||||
# Apply the request context
|
|
||||||
paginate = {
|
|
||||||
'paginator_class': EnhancedPaginator,
|
|
||||||
'per_page': get_paginate_count(request)
|
|
||||||
}
|
|
||||||
RequestConfig(request, paginate).configure(journalentry_table)
|
|
||||||
|
|
||||||
if request.user.has_perm('extras.add_journalentry'):
|
if request.user.has_perm('extras.add_journalentry'):
|
||||||
form = forms.JournalEntryForm(
|
form = forms.JournalEntryForm(
|
||||||
|
@ -1,11 +1,10 @@
|
|||||||
from django.db.models import Prefetch
|
from django.db.models import Prefetch
|
||||||
from django.db.models.expressions import RawSQL
|
from django.db.models.expressions import RawSQL
|
||||||
from django.shortcuts import get_object_or_404, redirect, render
|
from django.shortcuts import get_object_or_404, redirect, render
|
||||||
from django_tables2 import RequestConfig
|
|
||||||
|
|
||||||
from dcim.models import Device, Interface
|
from dcim.models import Device, Interface
|
||||||
from netbox.views import generic
|
from netbox.views import generic
|
||||||
from utilities.paginator import EnhancedPaginator, get_paginate_count
|
from utilities.tables import paginate_table
|
||||||
from utilities.utils import count_related
|
from utilities.utils import count_related
|
||||||
from virtualization.models import VirtualMachine, VMInterface
|
from virtualization.models import VirtualMachine, VMInterface
|
||||||
from . import filters, forms, tables
|
from . import filters, forms, tables
|
||||||
@ -231,12 +230,7 @@ class AggregateView(generic.ObjectView):
|
|||||||
prefix_table = tables.PrefixDetailTable(child_prefixes)
|
prefix_table = tables.PrefixDetailTable(child_prefixes)
|
||||||
if request.user.has_perm('ipam.change_prefix') or request.user.has_perm('ipam.delete_prefix'):
|
if request.user.has_perm('ipam.change_prefix') or request.user.has_perm('ipam.delete_prefix'):
|
||||||
prefix_table.columns.show('pk')
|
prefix_table.columns.show('pk')
|
||||||
|
paginate_table(prefix_table, request)
|
||||||
paginate = {
|
|
||||||
'paginator_class': EnhancedPaginator,
|
|
||||||
'per_page': get_paginate_count(request)
|
|
||||||
}
|
|
||||||
RequestConfig(request, paginate).configure(prefix_table)
|
|
||||||
|
|
||||||
# Compile permissions list for rendering the object table
|
# Compile permissions list for rendering the object table
|
||||||
permissions = {
|
permissions = {
|
||||||
@ -388,12 +382,7 @@ class PrefixPrefixesView(generic.ObjectView):
|
|||||||
prefix_table = tables.PrefixDetailTable(child_prefixes)
|
prefix_table = tables.PrefixDetailTable(child_prefixes)
|
||||||
if request.user.has_perm('ipam.change_prefix') or request.user.has_perm('ipam.delete_prefix'):
|
if request.user.has_perm('ipam.change_prefix') or request.user.has_perm('ipam.delete_prefix'):
|
||||||
prefix_table.columns.show('pk')
|
prefix_table.columns.show('pk')
|
||||||
|
paginate_table(prefix_table, request)
|
||||||
paginate = {
|
|
||||||
'paginator_class': EnhancedPaginator,
|
|
||||||
'per_page': get_paginate_count(request)
|
|
||||||
}
|
|
||||||
RequestConfig(request, paginate).configure(prefix_table)
|
|
||||||
|
|
||||||
# Compile permissions list for rendering the object table
|
# Compile permissions list for rendering the object table
|
||||||
permissions = {
|
permissions = {
|
||||||
@ -431,12 +420,7 @@ class PrefixIPAddressesView(generic.ObjectView):
|
|||||||
ip_table = tables.IPAddressTable(ipaddresses)
|
ip_table = tables.IPAddressTable(ipaddresses)
|
||||||
if request.user.has_perm('ipam.change_ipaddress') or request.user.has_perm('ipam.delete_ipaddress'):
|
if request.user.has_perm('ipam.change_ipaddress') or request.user.has_perm('ipam.delete_ipaddress'):
|
||||||
ip_table.columns.show('pk')
|
ip_table.columns.show('pk')
|
||||||
|
paginate_table(ip_table, request)
|
||||||
paginate = {
|
|
||||||
'paginator_class': EnhancedPaginator,
|
|
||||||
'per_page': get_paginate_count(request)
|
|
||||||
}
|
|
||||||
RequestConfig(request, paginate).configure(ip_table)
|
|
||||||
|
|
||||||
# Compile permissions list for rendering the object table
|
# Compile permissions list for rendering the object table
|
||||||
permissions = {
|
permissions = {
|
||||||
@ -534,12 +518,6 @@ class IPAddressView(generic.ObjectView):
|
|||||||
)
|
)
|
||||||
related_ips_table = tables.IPAddressTable(related_ips, orderable=False)
|
related_ips_table = tables.IPAddressTable(related_ips, orderable=False)
|
||||||
|
|
||||||
paginate = {
|
|
||||||
'paginator_class': EnhancedPaginator,
|
|
||||||
'per_page': get_paginate_count(request)
|
|
||||||
}
|
|
||||||
RequestConfig(request, paginate).configure(related_ips_table)
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
'parent_prefixes_table': parent_prefixes_table,
|
'parent_prefixes_table': parent_prefixes_table,
|
||||||
'duplicate_ips_table': duplicate_ips_table,
|
'duplicate_ips_table': duplicate_ips_table,
|
||||||
@ -703,12 +681,7 @@ class VLANGroupVLANsView(generic.ObjectView):
|
|||||||
vlan_table.columns.show('pk')
|
vlan_table.columns.show('pk')
|
||||||
vlan_table.columns.hide('site')
|
vlan_table.columns.hide('site')
|
||||||
vlan_table.columns.hide('group')
|
vlan_table.columns.hide('group')
|
||||||
|
paginate_table(vlan_table, request)
|
||||||
paginate = {
|
|
||||||
'paginator_class': EnhancedPaginator,
|
|
||||||
'per_page': get_paginate_count(request),
|
|
||||||
}
|
|
||||||
RequestConfig(request, paginate).configure(vlan_table)
|
|
||||||
|
|
||||||
# Compile permissions list for rendering the object table
|
# Compile permissions list for rendering the object table
|
||||||
permissions = {
|
permissions = {
|
||||||
@ -758,12 +731,7 @@ class VLANInterfacesView(generic.ObjectView):
|
|||||||
def get_extra_context(self, request, instance):
|
def get_extra_context(self, request, instance):
|
||||||
interfaces = instance.get_interfaces().prefetch_related('device')
|
interfaces = instance.get_interfaces().prefetch_related('device')
|
||||||
members_table = tables.VLANDevicesTable(interfaces)
|
members_table = tables.VLANDevicesTable(interfaces)
|
||||||
|
paginate_table(members_table, request)
|
||||||
paginate = {
|
|
||||||
'paginator_class': EnhancedPaginator,
|
|
||||||
'per_page': get_paginate_count(request)
|
|
||||||
}
|
|
||||||
RequestConfig(request, paginate).configure(members_table)
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
'members_table': members_table,
|
'members_table': members_table,
|
||||||
@ -778,12 +746,7 @@ class VLANVMInterfacesView(generic.ObjectView):
|
|||||||
def get_extra_context(self, request, instance):
|
def get_extra_context(self, request, instance):
|
||||||
interfaces = instance.get_vminterfaces().prefetch_related('virtual_machine')
|
interfaces = instance.get_vminterfaces().prefetch_related('virtual_machine')
|
||||||
members_table = tables.VLANVirtualMachinesTable(interfaces)
|
members_table = tables.VLANVirtualMachinesTable(interfaces)
|
||||||
|
paginate_table(members_table, request)
|
||||||
paginate = {
|
|
||||||
'paginator_class': EnhancedPaginator,
|
|
||||||
'per_page': get_paginate_count(request)
|
|
||||||
}
|
|
||||||
RequestConfig(request, paginate).configure(members_table)
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
'members_table': members_table,
|
'members_table': members_table,
|
||||||
|
@ -14,7 +14,6 @@ from django.utils.html import escape
|
|||||||
from django.utils.http import is_safe_url
|
from django.utils.http import is_safe_url
|
||||||
from django.utils.safestring import mark_safe
|
from django.utils.safestring import mark_safe
|
||||||
from django.views.generic import View
|
from django.views.generic import View
|
||||||
from django_tables2 import RequestConfig
|
|
||||||
from django_tables2.export import TableExport
|
from django_tables2.export import TableExport
|
||||||
|
|
||||||
from extras.models import CustomField, ExportTemplate
|
from extras.models import CustomField, ExportTemplate
|
||||||
@ -23,8 +22,8 @@ from utilities.exceptions import AbortTransaction
|
|||||||
from utilities.forms import (
|
from utilities.forms import (
|
||||||
BootstrapMixin, BulkRenameForm, ConfirmationForm, CSVDataField, ImportForm, TableConfigForm, restrict_form_fields,
|
BootstrapMixin, BulkRenameForm, ConfirmationForm, CSVDataField, ImportForm, TableConfigForm, restrict_form_fields,
|
||||||
)
|
)
|
||||||
from utilities.paginator import EnhancedPaginator, get_paginate_count
|
|
||||||
from utilities.permissions import get_permission_for_model
|
from utilities.permissions import get_permission_for_model
|
||||||
|
from utilities.tables import paginate_table
|
||||||
from utilities.utils import csv_format, normalize_querydict, prepare_cloned_fields
|
from utilities.utils import csv_format, normalize_querydict, prepare_cloned_fields
|
||||||
from utilities.views import GetReturnURLMixin, ObjectPermissionRequiredMixin
|
from utilities.views import GetReturnURLMixin, ObjectPermissionRequiredMixin
|
||||||
|
|
||||||
@ -195,12 +194,8 @@ class ObjectListView(ObjectPermissionRequiredMixin, View):
|
|||||||
filename=f'netbox_{self.queryset.model._meta.verbose_name_plural}.csv'
|
filename=f'netbox_{self.queryset.model._meta.verbose_name_plural}.csv'
|
||||||
)
|
)
|
||||||
|
|
||||||
# Apply the request context
|
# Paginate the objects table
|
||||||
paginate = {
|
paginate_table(table, request)
|
||||||
'paginator_class': EnhancedPaginator,
|
|
||||||
'per_page': get_paginate_count(request)
|
|
||||||
}
|
|
||||||
RequestConfig(request, paginate).configure(table)
|
|
||||||
|
|
||||||
context = {
|
context = {
|
||||||
'content_type': content_type,
|
'content_type': content_type,
|
||||||
|
@ -5,8 +5,11 @@ from django.core.exceptions import FieldDoesNotExist
|
|||||||
from django.db.models.fields.related import RelatedField
|
from django.db.models.fields.related import RelatedField
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
from django.utils.safestring import mark_safe
|
from django.utils.safestring import mark_safe
|
||||||
|
from django_tables2 import RequestConfig
|
||||||
from django_tables2.data import TableQuerysetData
|
from django_tables2.data import TableQuerysetData
|
||||||
|
|
||||||
|
from .paginator import EnhancedPaginator, get_paginate_count
|
||||||
|
|
||||||
|
|
||||||
class BaseTable(tables.Table):
|
class BaseTable(tables.Table):
|
||||||
"""
|
"""
|
||||||
@ -331,3 +334,18 @@ class UtilizationColumn(tables.TemplateColumn):
|
|||||||
|
|
||||||
def value(self, value):
|
def value(self, value):
|
||||||
return f'{value}%'
|
return f'{value}%'
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# Pagination
|
||||||
|
#
|
||||||
|
|
||||||
|
def paginate_table(table, request):
|
||||||
|
"""
|
||||||
|
Paginate a table given a request context.
|
||||||
|
"""
|
||||||
|
paginate = {
|
||||||
|
'paginator_class': EnhancedPaginator,
|
||||||
|
'per_page': get_paginate_count(request)
|
||||||
|
}
|
||||||
|
RequestConfig(request, paginate).configure(table)
|
||||||
|
Reference in New Issue
Block a user