mirror of
https://github.com/netbox-community/netbox.git
synced 2026-01-11 21:10:29 +01:00
In menus, qualify device names with site and/or tenant #8298
Closed
opened 2025-12-29 20:35:01 +01:00 by adam
·
18 comments
No Branch/Tag Specified
main
update-changelog-comments-docs
feature-removal-issue-type
20911-dropdown
20239-plugin-menu-classes-mutable-state
21097-graphql-id-lookups
feature
fix_module_substitution
20923-dcim-templates
20044-elevation-stuck-lightmode
feature-ip-prefix-link
v4.5-beta1-release
20068-import-moduletype-attrs
20766-fix-german-translation-code-literals
20378-del-script
7604-filter-modifiers-v3
circuit-swap
12318-case-insensitive-uniqueness
20637-improve-device-q-filter
20660-script-load
19724-graphql
20614-update-ruff
14884-script
02496-max-page
19720-macaddress-interface-generic-relation
19408-circuit-terminations-export-templates
20203-openapi-check
fix-19669-api-image-download
7604-filter-modifiers
19275-fixes-interface-bulk-edit
fix-17794-get_field_value_return_list
11507-show-aggregate-and-rir-on-api
9583-add_column_specific_search_field_to_tables
v4.5.0
v4.4.10
v4.4.9
v4.5.0-beta1
v4.4.8
v4.4.7
v4.4.6
v4.4.5
v4.4.4
v4.4.3
v4.4.2
v4.4.1
v4.4.0
v4.3.7
v4.4.0-beta1
v4.3.6
v4.3.5
v4.3.4
v4.3.3
v4.3.2
v4.3.1
v4.3.0
v4.2.9
v4.3.0-beta2
v4.2.8
v4.3.0-beta1
v4.2.7
v4.2.6
v4.2.5
v4.2.4
v4.2.3
v4.2.2
v4.2.1
v4.2.0
v4.1.11
v4.1.10
v4.1.9
v4.1.8
v4.2-beta1
v4.1.7
v4.1.6
v4.1.5
v4.1.4
v4.1.3
v4.1.2
v4.1.1
v4.1.0
v4.0.11
v4.0.10
v4.0.9
v4.1-beta1
v4.0.8
v4.0.7
v4.0.6
v4.0.5
v4.0.3
v4.0.2
v4.0.1
v4.0.0
v3.7.8
v3.7.7
v4.0-beta2
v3.7.6
v3.7.5
v4.0-beta1
v3.7.4
v3.7.3
v3.7.2
v3.7.1
v3.7.0
v3.6.9
v3.6.8
v3.6.7
v3.7-beta1
v3.6.6
v3.6.5
v3.6.4
v3.6.3
v3.6.2
v3.6.1
v3.6.0
v3.5.9
v3.6-beta2
v3.5.8
v3.6-beta1
v3.5.7
v3.5.6
v3.5.5
v3.5.4
v3.5.3
v3.5.2
v3.5.1
v3.5.0
v3.4.10
v3.4.9
v3.5-beta2
v3.4.8
v3.5-beta1
v3.4.7
v3.4.6
v3.4.5
v3.4.4
v3.4.3
v3.4.2
v3.4.1
v3.4.0
v3.3.10
v3.3.9
v3.4-beta1
v3.3.8
v3.3.7
v3.3.6
v3.3.5
v3.3.4
v3.3.3
v3.3.2
v3.3.1
v3.3.0
v3.2.9
v3.2.8
v3.3-beta2
v3.2.7
v3.3-beta1
v3.2.6
v3.2.5
v3.2.4
v3.2.3
v3.2.2
v3.2.1
v3.2.0
v3.1.11
v3.1.10
v3.2-beta2
v3.1.9
v3.2-beta1
v3.1.8
v3.1.7
v3.1.6
v3.1.5
v3.1.4
v3.1.3
v3.1.2
v3.1.1
v3.1.0
v3.0.12
v3.0.11
v3.0.10
v3.1-beta1
v3.0.9
v3.0.8
v3.0.7
v3.0.6
v3.0.5
v3.0.4
v3.0.3
v3.0.2
v3.0.1
v3.0.0
v2.11.12
v3.0-beta2
v2.11.11
v2.11.10
v3.0-beta1
v2.11.9
v2.11.8
v2.11.7
v2.11.6
v2.11.5
v2.11.4
v2.11.3
v2.11.2
v2.11.1
v2.11.0
v2.10.10
v2.10.9
v2.11-beta1
v2.10.8
v2.10.7
v2.10.6
v2.10.5
v2.10.4
v2.10.3
v2.10.2
v2.10.1
v2.10.0
v2.9.11
v2.10-beta2
v2.9.10
v2.10-beta1
v2.9.9
v2.9.8
v2.9.7
v2.9.6
v2.9.5
v2.9.4
v2.9.3
v2.9.2
v2.9.1
v2.9.0
v2.9-beta2
v2.8.9
v2.9-beta1
v2.8.8
v2.8.7
v2.8.6
v2.8.5
v2.8.4
v2.8.3
v2.8.2
v2.8.1
v2.8.0
v2.7.12
v2.7.11
v2.7.10
v2.7.9
v2.7.8
v2.7.7
v2.7.6
v2.7.5
v2.7.4
v2.7.3
v2.7.2
v2.7.1
v2.7.0
v2.6.12
v2.6.11
v2.6.10
v2.6.9
v2.7-beta1
Solcon-2020-01-06
v2.6.8
v2.6.7
v2.6.6
v2.6.5
v2.6.4
v2.6.3
v2.6.2
v2.6.1
v2.6.0
v2.5.13
v2.5.12
v2.6-beta1
v2.5.11
v2.5.10
v2.5.9
v2.5.8
v2.5.7
v2.5.6
v2.5.5
v2.5.4
v2.5.3
v2.5.2
v2.5.1
v2.5.0
v2.4.9
v2.5-beta2
v2.4.8
v2.5-beta1
v2.4.7
v2.4.6
v2.4.5
v2.4.4
v2.4.3
v2.4.2
v2.4.1
v2.4.0
v2.3.7
v2.4-beta1
v2.3.6
v2.3.5
v2.3.4
v2.3.3
v2.3.2
v2.3.1
v2.3.0
v2.2.10
v2.3-beta2
v2.2.9
v2.3-beta1
v2.2.8
v2.2.7
v2.2.6
v2.2.5
v2.2.4
v2.2.3
v2.2.2
v2.2.1
v2.2.0
v2.1.6
v2.2-beta2
v2.1.5
v2.2-beta1
v2.1.4
v2.1.3
v2.1.2
v2.1.1
v2.1.0
v2.0.10
v2.1-beta1
v2.0.9
v2.0.8
v2.0.7
v2.0.6
v2.0.5
v2.0.4
v2.0.3
v2.0.2
v2.0.1
v2.0.0
v2.0-beta3
v1.9.6
v1.9.5
v2.0-beta2
v1.9.4-r1
v1.9.3
v2.0-beta1
v1.9.2
v1.9.1
v1.9.0-r1
v1.8.4
v1.8.3
v1.8.2
v1.8.1
v1.8.0
v1.7.3
v1.7.2-r1
v1.7.1
v1.7.0
v1.6.3
v1.6.2-r1
v1.6.1-r1
1.6.1
v1.6.0
v1.5.2
v1.5.1
v1.5.0
v1.4.2
v1.4.1
v1.4.0
v1.3.2
v1.3.1
v1.3.0
v1.2.2
v1.2.1
v1.2.0
v1.1.0
v1.0.7-r1
v1.0.7
v1.0.6
v1.0.5
v1.0.4
v1.0.3-r1
v1.0.3
1.0.0
Labels
Clear labels
beta
breaking change
complexity: high
complexity: low
complexity: medium
needs milestone
netbox
pending closure
plugin candidate
pull-request
severity: high
severity: low
severity: medium
status: accepted
status: backlog
status: blocked
status: duplicate
status: needs owner
status: needs triage
status: revisions needed
status: under review
topic: GraphQL
topic: Internationalization
topic: OpenAPI
topic: UI/UX
topic: cabling
topic: event rules
topic: htmx navigation
topic: industrialization
topic: migrations
topic: plugins
topic: scripts
topic: templating
topic: testing
type: bug
type: deprecation
type: documentation
type: feature
type: housekeeping
type: translation
Mirrored from GitHub Pull Request
Milestone
No items
No Milestone
Projects
Clear projects
No project
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: starred/netbox#8298
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @candlerb on GitHub (Jul 5, 2023).
NetBox version
v3.5.4
Feature type
Change to existing functionality
Proposed functionality
Currently when you get a drop-down selection list of devices (e.g. when creating a cable), the list shows only the device name.
However, device names are only unique within a given site/tenant.
Therefore if you have 100 sites, each with a device named "PDU", you will see a drop-down menu with 100 entries all called "PDU" - it's impossible to distinguish one from another.
Proposal: the menu label for a device should show "device name - site - tenant". If the device has no name, then "device model - id - site - tenant".
Use case
In some contexts it is possible to filter this list down further - e.g. by opening the filter sub-window and filtering on site.
But in general, I think presenting a menu of identical-looking choices (when in fact they are significantly different, and choosing the wrong one could be a serious error) is a poor user experience.
Database changes
None
External dependencies
None
@DanSheps commented on GitHub (Jul 5, 2023):
Tangentially related: #11478
This same problem pops up in the context of interfaces.
@opericgithub commented on GitHub (Jul 5, 2023):
Why don't you include site and/or tenant column in a table view?
@candlerb commented on GitHub (Jul 5, 2023):
Additional point 1: it occurs to me that these menus need to be searchable efficiently using AJAX. This suggests that there should be a "display label" field which is cached in the database model - much in the same way as interfaces have a
_namefield for natural sorting.(This could also have a unique constraint, which would guarantee that you can never accidentally have two indistinguishable items in a menu)
Additional point 2: another tangential issue. In custom scripts, I would like to do this:
However, this displays only the Site "Name" attribute. I need also to show (and be able to search on) a site code, which is held separately in
custom_field_data['mdf_id']- but ObjectVar doesn't allow customization of the display label.My workaround (which is OK for now because the list of sites isn't too large) is to generate a materialized ChoiceVar instead:
But in the long term, if Site also had a display
_nameattribute, whose contents could be overridden with a custom function, that would achieve the same goal in a cleaner way.@candlerb commented on GitHub (Jul 5, 2023):
@DanSheps: a vaguely related case which doesn't involve VCs is when a cable endpoint has multiple terminations, and those are interfaces on different devices, then the interface names may become indistinguishable: #10841
@DanSheps commented on GitHub (Jul 5, 2023):
It is related in that all of this (this issue and the one I referenced) relates to the serializer's
display_namefield not including context data.@martinum4 commented on GitHub (Jul 6, 2023):
That seem like the same problem OpenStreetMap-Contributors are facing, names are names, not descriptions etc.
If the device is distinguishable from others by type and role and it has no actual assigned name just leave the name empty…
@DanSheps commented on GitHub (Jul 6, 2023):
I think the example was made overly generic, but take for example:
"CORE-SW-01", you might have one in Site A and Site B. If you search just "CORE-SW-01" it will bring in all. However if there is a
display_nameattribute that includes more name context data (such as "CORE-SW-01, Site A, Region B" vs "CORE-SW-01, Site B, Region B" you can pick the appropriate one.@candlerb commented on GitHub (Jul 6, 2023):
Yes that's it exactly.
@ITJamie commented on GitHub (Jul 6, 2023):
I have also been thinking about this and playing with ideas how to implement a fix in a sane way across models.
I made https://github.com/netbox-community/netbox/compare/develop...ITJamie:netbox:alt_display_name as a concept of how we could define an "additional" standardized model property that if exists would be used in selection/multiselection boxes where additional context would be useful.
@martinum4 commented on GitHub (Jul 6, 2023):
I personally thing the end-user-friendliest approach would be to allow comma to be used as "search character", eg you search for "sw-core-1, samplecity" it then searches for "sw-core-1" first and in the results for that it searches for "samplecity" in all the other linked attributes (racks, locations, sites, regions).
@jsenecal commented on GitHub (Jul 7, 2023):
There are also limitations in the frontend library that netbox uses as it currently only allows to find/select results which have the string typed in the select box. Just more things to consider when thinking about "searching" from additional fields/relationships.
@DanSheps commented on GitHub (Jul 11, 2023):
I am not against this approach, but I think if we are doing this it makes more sense to override in get_display() instead.
That said, one option that this got me thinking about more, is to perhaps have the widget allow you to define a list of fields to include in the display name and it combines them itself (this would only work for fields available via the nested serializer). Something like:
This way, you could override it on the form itself without changing the underlying get_display function. The ApiSelect function would need to handle tokenizing the fields and replacing them but it is less "disruptive" to the underlying API.
@candlerb commented on GitHub (Jul 11, 2023):
How would this work with filter-as-you-type, when there are a large set of objects in the database? Does it currently use an indexed column (Name)?
@DanSheps commented on GitHub (Jul 11, 2023):
I believe the filter-as-you-type (might be mistaken mind you) uses a async request to
dcim/interfaces/?q=X, which wouldn't interfere with it, to my knowledge.Take this with a grain of salt as I am not a typescript expert.
@candlerb commented on GitHub (Jul 11, 2023):
Yes you're right, for example it calls
/api/dcim/devices/?brief=true&q=Xwhen searching for a device to create a cable endpoint (seen via developer console)The problem though will be that
qmay not match the strings being shown. For example, if the drop-down showsand the user types 'bar', they would expect the list to contract to
but I think it will just go to empty (testing seems to confirm this; if I type part of a site name, I don't see any devices)
@github-actions[bot] commented on GitHub (Oct 10, 2023):
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. NetBox is governed by a small group of core maintainers which means not all opened issues may receive direct feedback. Do not attempt to circumvent this process by "bumping" the issue; doing so will result in its immediate closure and you may be barred from participating in any future discussions. Please see our contributing guide.
@ITJamie commented on GitHub (Oct 23, 2023):
@DanSheps you mentioned in https://github.com/netbox-community/netbox/pull/13156 that you were looking at another way to do this. I have vague memory of another PR fixing something like this but am having trouble tracking it down to suggest something similar for this.
@jeremystretch commented on GitHub (Nov 6, 2023):
This would be addressed by #13283