1
0
mirror of https://github.com/netbox-community/netbox.git synced 2024-05-10 07:54:54 +00:00

Fixes #13410: Fix rendering of custom choice fields with large numner of choices

This commit is contained in:
Jeremy Stretch
2023-08-08 09:32:56 -04:00
parent 36072f17a9
commit f255fe507d
3 changed files with 21 additions and 12 deletions

View File

@ -80,7 +80,7 @@ class CustomFieldChoiceSetViewSet(NetBoxModelViewSet):
# Paginate data # Paginate data
if page := self.paginate_queryset(choices): if page := self.paginate_queryset(choices):
data = [ data = [
{'value': c[0], 'label': c[1]} for c in page {'id': c[0], 'display': c[1]} for c in page
] ]
return self.get_paginated_response(data) return self.get_paginated_response(data)

View File

@ -441,18 +441,25 @@ class CustomField(CloningMixin, ExportTemplatesMixin, ChangeLoggedModel):
if set_initial and default_choice: if set_initial and default_choice:
initial = default_choice initial = default_choice
if self.type == CustomFieldTypeChoices.TYPE_SELECT: if for_csv_import:
field_class = CSVChoiceField if for_csv_import else DynamicChoiceField if self.type == CustomFieldTypeChoices.TYPE_SELECT:
widget_class = APISelect field_class = CSVChoiceField
else:
field_class = CSVMultipleChoiceField
field = field_class(choices=choices, required=required, initial=initial)
else: else:
field_class = CSVMultipleChoiceField if for_csv_import else DynamicMultipleChoiceField if self.type == CustomFieldTypeChoices.TYPE_SELECT:
widget_class = APISelectMultiple field_class = DynamicChoiceField
field = field_class( widget_class = APISelect
choices=choices, else:
required=required, field_class = DynamicMultipleChoiceField
initial=initial, widget_class = APISelectMultiple
widget=widget_class(api_url=f'/api/extras/custom-field-choice-sets/{self.choice_set.pk}/choices/') field = field_class(
) choices=choices,
required=required,
initial=initial,
widget=widget_class(api_url=f'/api/extras/custom-field-choice-sets/{self.choice_set.pk}/choices/')
)
# URL # URL
elif self.type == CustomFieldTypeChoices.TYPE_URL: elif self.type == CustomFieldTypeChoices.TYPE_URL:

View File

@ -29,6 +29,8 @@ class DynamicChoiceField(forms.ChoiceField):
self.choices = [ self.choices = [
choice for choice in self.choices if choice[0] == data choice for choice in self.choices if choice[0] == data
] ]
else:
self.choices = []
return bound_field return bound_field