[PR #3813] [MERGED] Fixes #3812: Only preload selected options for API-based select #12647

Closed
opened 2025-12-29 22:22:50 +01:00 by adam · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/netbox-community/netbox/pull/3813
Author: @hSaria
Created: 1/1/2020
Status: Merged
Merged: 1/2/2020
Merged by: @jeremystretch

Base: developHead: 3812-optimize-select-api


📝 Commits (2)

  • 53625e0 Fixes #3812: Only preload selected options for API-based select
  • 242ae9e Comment clarification

📊 Changes

3 files changed (+8 additions, -0 deletions)

View changed files

📝 docs/release-notes/version-2.6.md (+1 -0)
📝 netbox/utilities/forms.py (+2 -0)
netbox/utilities/templates/widgets/select_api.html (+5 -0)

📄 Description

Fixes: #3812

For API-based select fields, only preload the selected options. Other options are dynamically displayed and added via the API when selected.

Example for APISelect

No selection:

<select name="device_role" class="netbox-select2-api form-control select2-hidden-accessible" data-url="/api/dcim/device-roles/" required="" placeholder="Device role" id="id_device_role" tabindex="-1" aria-hidden="true">
  <option value="" selected="">---------</option>
</select>

After selection:

<select name="device_role" class="netbox-select2-api form-control select2-hidden-accessible" data-url="/api/dcim/device-roles/" required="" placeholder="Device role" id="id_device_role" tabindex="-1" aria-hidden="true">
  <option value="" selected="">---------</option>
  <option value="1">Access</option>
</select>

Existing selection:

<select name="device_role" class="netbox-select2-api form-control select2-hidden-accessible" data-url="/api/dcim/device-roles/" required="" placeholder="Device role" id="id_device_role" tabindex="-1" aria-hidden="true">
  <option value="1" selected="">Access</option>
</select>

Example for APISelectMultiple

This is output is from tagged VLANs which may change because of #3589. The list of choices is being manually overridden so that's why they're being created. In reality, the list isn't being used because the API select is dynamically fetching the options and their groups.

No selection:

<select name="tagged_vlans" class="netbox-select2-api form-control select2-hidden-accessible" data-url="/api/ipam/vlans/" data-full="" display-field="display_name" data-multiple="1" placeholder="None" id="id_tagged_vlans" multiple="" tabindex="-1" aria-hidden="true">
  <optgroup label="Global">
  </optgroup>
  <optgroup label="global-group-1">
  </optgroup>
  <optgroup label="London">
  </optgroup>
</select>

Groups are still created if present.

After selection (multiple):

<select name="tagged_vlans" class="netbox-select2-api form-control select2-hidden-accessible" data-url="/api/ipam/vlans/" data-full="" display-field="display_name" data-multiple="1" placeholder="None" id="id_tagged_vlans" multiple="" tabindex="-1" aria-hidden="true">
  <optgroup label="Global">
  </optgroup>
  <optgroup label="global-group-1">
  </optgroup>
  <optgroup label="London">
  </optgroup>
  <option value="1">1 (vlan1)</option>
  <option value="2">2 (vlan2)</option>
</select>

Existing selection (multiple):

<select name="tagged_vlans" class="netbox-select2-api form-control select2-hidden-accessible" data-url="/api/ipam/vlans/" data-full="" display-field="display_name" data-multiple="1" placeholder="None" id="id_tagged_vlans" multiple="" tabindex="-1" aria-hidden="true">
  <optgroup label="Global">
    <option value="2" selected="">2 (vlan2)</option>
  </optgroup>
  <optgroup label="global-group-1">
  </optgroup>
  <optgroup label="London">
    <option value="1" selected="">1 (vlan1)</option>
  </optgroup>
</select>

🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/netbox-community/netbox/pull/3813 **Author:** [@hSaria](https://github.com/hSaria) **Created:** 1/1/2020 **Status:** ✅ Merged **Merged:** 1/2/2020 **Merged by:** [@jeremystretch](https://github.com/jeremystretch) **Base:** `develop` ← **Head:** `3812-optimize-select-api` --- ### 📝 Commits (2) - [`53625e0`](https://github.com/netbox-community/netbox/commit/53625e0deabd807e324d8478d9e535c54eec19f3) Fixes #3812: Only preload selected options for API-based select - [`242ae9e`](https://github.com/netbox-community/netbox/commit/242ae9eb91de3756fe20fa0e68f1c8c0442f08dc) Comment clarification ### 📊 Changes **3 files changed** (+8 additions, -0 deletions) <details> <summary>View changed files</summary> 📝 `docs/release-notes/version-2.6.md` (+1 -0) 📝 `netbox/utilities/forms.py` (+2 -0) ➕ `netbox/utilities/templates/widgets/select_api.html` (+5 -0) </details> ### 📄 Description ### Fixes: #3812 For API-based select fields, only preload the selected options. Other options are dynamically displayed and added via the API when selected. #### Example for `APISelect` No selection: ```html <select name="device_role" class="netbox-select2-api form-control select2-hidden-accessible" data-url="/api/dcim/device-roles/" required="" placeholder="Device role" id="id_device_role" tabindex="-1" aria-hidden="true"> <option value="" selected="">---------</option> </select> ``` After selection: ```html <select name="device_role" class="netbox-select2-api form-control select2-hidden-accessible" data-url="/api/dcim/device-roles/" required="" placeholder="Device role" id="id_device_role" tabindex="-1" aria-hidden="true"> <option value="" selected="">---------</option> <option value="1">Access</option> </select> ``` Existing selection: ```html <select name="device_role" class="netbox-select2-api form-control select2-hidden-accessible" data-url="/api/dcim/device-roles/" required="" placeholder="Device role" id="id_device_role" tabindex="-1" aria-hidden="true"> <option value="1" selected="">Access</option> </select> ``` #### Example for `APISelectMultiple` > This is output is from tagged VLANs which may change because of #3589. The list of choices is being manually overridden so that's why they're being created. In reality, the list isn't being used because the API select is dynamically fetching the options and their groups. No selection: ```html <select name="tagged_vlans" class="netbox-select2-api form-control select2-hidden-accessible" data-url="/api/ipam/vlans/" data-full="" display-field="display_name" data-multiple="1" placeholder="None" id="id_tagged_vlans" multiple="" tabindex="-1" aria-hidden="true"> <optgroup label="Global"> </optgroup> <optgroup label="global-group-1"> </optgroup> <optgroup label="London"> </optgroup> </select> ``` > Groups are still created if present. After selection (multiple): ```html <select name="tagged_vlans" class="netbox-select2-api form-control select2-hidden-accessible" data-url="/api/ipam/vlans/" data-full="" display-field="display_name" data-multiple="1" placeholder="None" id="id_tagged_vlans" multiple="" tabindex="-1" aria-hidden="true"> <optgroup label="Global"> </optgroup> <optgroup label="global-group-1"> </optgroup> <optgroup label="London"> </optgroup> <option value="1">1 (vlan1)</option> <option value="2">2 (vlan2)</option> </select> ``` Existing selection (multiple): ```html <select name="tagged_vlans" class="netbox-select2-api form-control select2-hidden-accessible" data-url="/api/ipam/vlans/" data-full="" display-field="display_name" data-multiple="1" placeholder="None" id="id_tagged_vlans" multiple="" tabindex="-1" aria-hidden="true"> <optgroup label="Global"> <option value="2" selected="">2 (vlan2)</option> </optgroup> <optgroup label="global-group-1"> </optgroup> <optgroup label="London"> <option value="1" selected="">1 (vlan1)</option> </optgroup> </select> ``` --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
adam added the pull-request label 2025-12-29 22:22:50 +01:00
adam closed this issue 2025-12-29 22:22:50 +01:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: starred/netbox#12647