mirror of
https://github.com/netbox-community/netbox.git
synced 2026-01-11 21:10:29 +01:00
Searching on custom fields #962
Closed
opened 2025-12-29 16:27:17 +01:00 by adam
·
14 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#962
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 (May 17, 2017).
Issue type:
Feature request
Two issues with searching over custom field values.
If you have defined a custom string field on IP Address, and then use the specific search page (
/ipam/ip-addresses/) you are presented with a search box for that field. However it only matches if you type the full value of the custom field; it doesn't do prefix matching.It would also be useful if global search could also search over custom fields, which could be as simple as:
I realise that enumerated values would cause a problem, but just matching string-valued custom fields would be fine for me.
@jeremystretch commented on GitHub (Jun 1, 2017):
The first one is an easy fix.
The second one is much more involved. The current global search logic simply loops through the requested object types (which is all of them by default) and performs a separate query for each model. Each model with results is then displayed as its own table with related data as appropriate.
If you'd like to take a shot at implementing this using the Django ORM I'll keep this issue open, but otherwise I'm not sure it's worth the complexity and overhead to implement.
@JNR8 commented on GitHub (Jun 2, 2017):
I was going to log this exact request.
We use custom fields on IP addresses to record DNS names associated with that IP. Mainnly for external IP addresses. The logic behind it is that you could enter a domain name and get all the IP addresses associated with that domain name and its sub domains. But this does not currently work. I had thought that because I had not set the custom field as filterable it did not show. but alas this is not the case.
If its possible to work your magic in to get cutom field value returned when searching that would be very helpful to us.
Thanks.
@candlerb commented on GitHub (Jun 4, 2017):
I'm no expert in Django ORM, but it looks like there are a couple of ways to do this.
I believe the global search code is here in
netbox/views.py:Options:
(1) For each of those querysets, do a union query to add the objects with given custom field value. For example, when you're looking for IPAddress objects, also do this query:
Obtaining the union of two querysets looks to be straightforward. Then you pass that to
table()as now.(2) Up-front, do a single query which gets all the objects which match the given custom field value
In general, there could be a mix of different object classes in custom_results.
Then, when you do queries for each of the different object types, you can add in the relevant objects from
custom_resultsI know nothing about either the queryset or table objects, but it seems to me you want to do something like this (pseudo-code):
Or maybe it's possible to construct a QuerySet out of custom_results and union it into the first queryset.
@arionl commented on GitHub (Feb 1, 2018):
Being able to search globally on custom fields would really helpful. I'm using a couple custom fields that apply both to Devices and Virtual Machines and at this point there is no way to get all results without doing two different searches.. While Devices and Virtual Machines have any disparate attributes, they are both fundamentally nodes-on-a-network and finding a way to do a "Filter" view that shows the common attributes of those two object sets (including Custom Fields) would be extremely handy..
@jdell64 commented on GitHub (Feb 3, 2018):
What about creating a search object? That search object can run your search query and perform the necessary joins... so, in your case it would run the two searches and map reduce for you.
@arionl commented on GitHub (Feb 12, 2018):
@jdell64 not sure if you were referencing my comment above, but if so, how would I go about creating the custom search object? To recap my use case, I'm using a custom field to identify if a Device or Virtual Machine should be actively monitored by a separate monitoring platform (simple true/false). It would be very handy to filter on this attribute through a global search form rather than going to
Devices -> Devices -> SearchandVirtualization -> Virtual Machines -> Search. If you could point me in the right direction it would be greatly appreciated.@denogio commented on GitHub (Feb 22, 2018):
Searching globally in custom fields would really be helpful IMO. We have some custom_fields for all our servers and vm and it would really be helpful to be able to search globally in these fields. Would really lighten our workflow.
@jdell64 commented on GitHub (Feb 22, 2018):
@arionl sorry, that was a speculation of a possible solution that would have to be developed first.
(Edit by jstretch: This comment got posted 5 times somehow, deleted the other 4.)
@jeremystretch commented on GitHub (Jul 2, 2019):
Please stop asking for updates. If there's an update, it will appear here.
@jeremystretch commented on GitHub (Jul 24, 2020):
Blocked by #4878
@jeremystretch commented on GitHub (Dec 21, 2020):
With the v2.10 release, custom field data is now stored locally on each model instance as JSON. Marking this as
needs ownerfor anyone who would like to take on this work. Please see the Django documentation for instructions on querying JSONField data.@candlerb commented on GitHub (Jan 5, 2021):
The main problem is efficient search without doing a full table scan of every single table in the system - especially if you want to search for substrings of any custom field value.
As a first approximation, you could just do a full-text search on the entire JSON blob:
However, the EXPLAIN shows a sequential scan, and I don't know why. Did I do something wrong, or is it just that the table is too small?
A more advanced implementation would index only the values and not the keys from the JSON, and ignore integer and boolean values. I knocked up the following, and also tried using a trigram index:
Again the EXPLAIN shows a full sequential scan.
EDIT: for test purposes do
set enable_seqscan=off;to force use of the indexes even when Postgres would rather not.@stale[bot] commented on GitHub (Feb 22, 2021):
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. Please see our contributing guide.
@stale[bot] commented on GitHub (Mar 19, 2021):
This issue has been automatically closed due to lack of activity. In an effort to reduce noise, please do not comment any further. Note that the core maintainers may elect to reopen this issue at a later date if deemed necessary.