mirror of
https://github.com/netbox-community/netbox.git
synced 2026-01-11 21:10:29 +01:00
Custom Fields Specific to Device Types in Netbox #7977
Closed
opened 2025-12-29 20:30:41 +01:00 by adam
·
9 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#7977
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 @chesronw on GitHub (May 2, 2023).
NetBox version
v3.5.0
Feature type
Change to existing functionality
Proposed functionality
I would like to request a new feature for Netbox that would allow us to add custom fields specific to a device type. Currently, we can add custom fields to all devices, but we would like to have more control over which devices have these fields.
The reason for this feature request is that we have different types of devices in our network, such as servers, access points, and switches, and we only want certain custom fields to appear on specific device types. For example, we may want to add a custom field for server rack unit or switch port status, but we don't want these fields to appear on access points.
Having this feature would make it easier for us to manage our network inventory and reduce clutter on the interface. It would also help ensure that we have the necessary information for each device type without having to scroll through irrelevant custom fields.
Thank you for considering this feature request. We believe it would greatly enhance the functionality and usability of Netbox.
Use case
Imagine a company that has a large network with different types of devices, including switches, routers, servers, and access points. The IT team wants to track specific information for each device type but wants to avoid cluttering the interface with irrelevant custom fields.
For example, they want to track support levels for switches and routers, but not for servers and access points. They also want to track SQL licenses for servers but not for other devices.
Without the ability to add custom fields specific to device types, the IT team would need to add all custom fields to all devices, leading to a cluttered interface and potential errors.
With the proposed feature, the IT team can define custom fields for each device type. This allows them to easily track support levels for switches and routers, SQL licenses for servers, and firmware version for access points, while avoiding clutter on devices where these fields are not relevant.
Overall, the proposed feature would provide greater flexibility and control in managing custom fields for different types of devices, allowing IT teams to track specific information efficiently without cluttering the interface.
Database changes
No response
External dependencies
No response
@stavr666 commented on GitHub (May 2, 2023):
I'm trying to understand your scenarios, but it seems not really practical.
From my PoV, most users of Netbox implement it as source of tracking different approaches and/or automate some (or most) processes.
Your FR looks like you have exceptional basic-level scenarios for small teams, where you put some staff in netbox "just in case someone asks".
For tracking support levels, attached licenses (isn't any software management already include this kind of process?) etc., you can use right now:
All of them can be parsed by external software and remove your concerns about bunch of empty custom fields.
Also, why your scenario include only devices? Why similar conditions not applied to Clusters and VMs, or even IP addresses and prefixes. They also can have conditional requirements for extended information.
If some of your scenario make sense for other Netbox users, I'll prefer FR with "hide when not defined" toggle for all CFs. This way you can throw as much fields as you like, use it as wide as current implementation, but have more clean view of objects, than existing:

@ITJamie commented on GitHub (May 2, 2023):
I would also like to see this, to be more specific to be able to limit custom fields to objects with specific "roles".
From an backend pov, all "device" custom fields would exist on all devices, however the view and edit forms should only show those fields for devices with that particular role.
It would allow for sanitisation of the edit and view screens, to make them more user friendly.
from an API / automation POV it wouldnt matter that those fields exist
@jeremystretch commented on GitHub (May 5, 2023):
I'm afraid you're trying to squeeze too much functionality out of custom fields. Custom fields are a convenience afforded for situations where you need to store some extra data with objects that isn't accommodated by the built-in fields. They are a compromise which stops short of actually manipulating underlying database table schema, providing a degree of flexibility offset by several limitations.
This approach works okay for what it is, but absolutely will not scale to support conditional logic. You would essentially be attempting to replicate relational database functionality entirely within the application, rather than in the database built expressly for that purpose.
The only feasible, scalable, maintainable solution for the cited use case is to introduce a purpose-built model delivered via a plugin, with a proper schema and relational fields to perform as needed. This is actually quite easy to do (check out our plugin tutorial) and will easily deliver a much higher ROI than trying to hack something together with custom fields.
@chesronw commented on GitHub (May 8, 2023):
I understand your point, but I still think that having the ability to show or hide custom fields on specific devices or objects would be a useful feature for many users. While custom fields may have limitations, they are still a valuable tool for storing extra data, and adding conditional logic would only enhance their functionality.
Additionally, while creating a separate plugin for this purpose may be feasible, it would require users to install and maintain yet another plugin, which may not be ideal for everyone. By integrating this feature into the core functionality, it would be easier for users to manage and use.
Overall, I believe that adding the ability to show or hide custom fields based on specific criteria would be a valuable addition to the platform, and would benefit many users.
@jeremystretch commented on GitHub (May 8, 2023):
I'm sorry but I don't think you do.
I'm not arguing that it wouldn't be useful, if it was feasible. I'm arguing that it's not feasible.
Neither would trying to hack together a solution using custom fields, but the plugin approach is at least well-supported and maintainable.
@JoeIzzard commented on GitHub (May 10, 2023):
I'd argue it's more feasible and maintainable for this to be tackled at the core level instead of requiring us to develop a plugin per device type.
We have a large selection of device types that would benefit from custom fields being tied to them. This is something we have had in asset management systems for a while. For example, I know this isn't what Netbox is designed or aimed at but it a clear example from our organisation, we have large dimmer rooms handling power to a number of devices. This may mean a dimmer is powering a switch etc. The dimmer is made from modules, these modules don't have a serial number for the assembly, instead we need to record:
I could model this in Netbox, but would then be stuck with those fields appearing on my switch.
Adding/Modifying a field in the custom field schema to link to device type through a list would allow us to specify which device types a custom field applies to. For ease, the field is displayed in the UI if it is present in the list, or has a value assigned. It could also be schema'd so that the device type is what has the link to custom fields which would reduce lookup time.
I don't know tons about the Netbox schema so can't say that those ideas would 100% work but there are almost certainly ways we could handle this better that requiring 100s of plugins.
Happy to put together a more complete proposal if you can point me to any info on the current Schema etc.
@jeremystretch commented on GitHub (May 10, 2023):
I can't imagine why you would possibly need a separate plugin per device type, and this assertion strongly suggests that you've not put real consideration into the idea.
I'm not going to burn any more time debating this. If you disagree with my take, I have a challenge for you: Try building it. Anyone qualified to debate the feasibility certainly must be capable of building a prototype implementation. Once that's done, and you've negated my concerns about performance, maintainability, and scale, you're welcome to submit a detailed implementation proposal for discussion.
@chesronw commented on GitHub (May 10, 2023):
@jeremystretch thanks for your time!
The whole idea behind it was to make Netbox better with this idea.
No problem! we are going to take a look how we can fix this internally without having an extra documentation tooling beside Netbox.
@JoeIzzard commented on GitHub (May 10, 2023):
@jeremystretch i May have misunderstood your suggestion to use plugins then. It came across to me as a suggestion to have a plug-in for each device type that handles the custom fields for that device type.
Are you instead suggesting a plug-in that is essentially just custom fields but with the ability to link them to device types?
I'm more than happy to build a prototype and work with you and team to actually see if it is feasible, hence why I offered to put together a more comprehensive Schema and implementation suggestion, to suggest that because I'm interested in the feature I must be unqualified to implement it is rude and not really very fitting of an open source project.