From af065109217745e00a5a7672ef7c338e0dbf840b Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Wed, 16 Aug 2023 11:08:36 -0400 Subject: [PATCH] Closes #13412: Enable pagination of custom field choice set choices --- netbox/extras/views.py | 21 +++++++++++++++++++ .../extras/customfieldchoiceset.html | 8 ++----- 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/netbox/extras/views.py b/netbox/extras/views.py index 193d8821b..a9636cc9e 100644 --- a/netbox/extras/views.py +++ b/netbox/extras/views.py @@ -1,6 +1,7 @@ from django.contrib import messages from django.contrib.auth.mixins import LoginRequiredMixin from django.contrib.contenttypes.models import ContentType +from django.core.paginator import EmptyPage from django.db.models import Count, Q from django.http import HttpResponseBadRequest, HttpResponseForbidden, HttpResponse from django.shortcuts import get_object_or_404, redirect, render @@ -18,6 +19,7 @@ from netbox.config import get_config, PARAMS from netbox.views import generic from utilities.forms import ConfirmationForm, get_field_value from utilities.htmx import is_htmx +from utilities.paginator import EnhancedPaginator, get_paginate_count from utilities.rqworker import get_workers_for_queue from utilities.templatetags.builtins.filters import render_markdown from utilities.utils import copy_safe_request, count_related, get_viewname, normalize_querydict, shallow_compare_dict @@ -89,6 +91,25 @@ class CustomFieldChoiceSetListView(generic.ObjectListView): class CustomFieldChoiceSetView(generic.ObjectView): queryset = CustomFieldChoiceSet.objects.all() + def get_extra_context(self, request, instance): + + # Paginate choices list + per_page = get_paginate_count(request) + try: + page_number = request.GET.get('page', 1) + except ValueError: + page_number = 1 + paginator = EnhancedPaginator(instance.choices, per_page) + try: + choices = paginator.page(page_number) + except EmptyPage: + choices = paginator.page(paginator.num_pages) + + return { + 'paginator': paginator, + 'choices': choices, + } + @register_model_view(CustomFieldChoiceSet, 'edit') class CustomFieldChoiceSetEditView(generic.ObjectEditView): diff --git a/netbox/templates/extras/customfieldchoiceset.html b/netbox/templates/extras/customfieldchoiceset.html index e77a8432d..7240a88bf 100644 --- a/netbox/templates/extras/customfieldchoiceset.html +++ b/netbox/templates/extras/customfieldchoiceset.html @@ -55,18 +55,14 @@ Label - {% for value, label in object.choices|slice:":50" %} + {% for value, label in choices %} {{ value }} {{ label }} {% endfor %} - {% if object.choices|length > 50 %} - - (Additional choices not displayed) - - {% endif %} + {% include 'inc/paginator.html' with page=choices %} {% plugin_right_page object %}