netbox-community / netbox

The premier source of truth powering network automation. Open source under Apache 2. Try NetBox Cloud free: https://netboxlabs.com/free-netbox-cloud/
http://netboxlabs.com/oss/netbox/
Apache License 2.0
15.98k stars 2.56k forks source link

FieldError exception raised in 3.2beta (docker image from 3/9/2022) #8838

Closed jcollie closed 2 years ago

jcollie commented 2 years ago

NetBox version

netbox-7f458459b6-pq69t (v3.2.0-beta1) (docker image from 3/9/2022)

Python version

3.9

Steps to Reproduce

  1. Type some text into global search field.
  2. Click on search button.

Expected Behavior

Should bring up a search for the entered string.

Observed Behavior

FieldError exception raised.

Environment:

Request Method: GET
Request URL: https://netbox.dmacc.net/search/?q=34295&obj_type=

Django Version: 4.0.2
Python Version: 3.9.5
Installed Applications:
['django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'django.contrib.humanize',
 'corsheaders',
 'debug_toolbar',
 'graphiql_debug_toolbar',
 'django_filters',
 'django_tables2',
 'django_prometheus',
 'graphene_django',
 'mptt',
 'rest_framework',
 'social_django',
 'taggit',
 'timezone_field',
 'circuits',
 'dcim',
 'ipam',
 'extras',
 'tenancy',
 'users',
 'utilities',
 'virtualization',
 'wireless',
 'django_rq',
 'drf_yasg']
Installed Middleware:
['graphiql_debug_toolbar.middleware.DebugToolbarMiddleware',
 'django_prometheus.middleware.PrometheusBeforeMiddleware',
 'corsheaders.middleware.CorsMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware',
 'django.middleware.security.SecurityMiddleware',
 'netbox.middleware.ExceptionHandlingMiddleware',
 'netbox.middleware.RemoteUserMiddleware',
 'netbox.middleware.LoginRequiredMiddleware',
 'netbox.middleware.DynamicConfigMiddleware',
 'netbox.middleware.APIVersionMiddleware',
 'netbox.middleware.ObjectChangeMiddleware',
 'django_prometheus.middleware.PrometheusAfterMiddleware']

Traceback (most recent call last):
  File "/opt/netbox/venv/lib/python3.9/site-packages/django/core/handlers/exception.py", line 47, in inner
    response = get_response(request)
  File "/opt/netbox/venv/lib/python3.9/site-packages/django/core/handlers/base.py", line 181, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/opt/netbox/venv/lib/python3.9/site-packages/django/views/generic/base.py", line 69, in view
    return self.dispatch(request, *args, **kwargs)
  File "/opt/netbox/venv/lib/python3.9/site-packages/django/views/generic/base.py", line 101, in dispatch
    return handler(request, *args, **kwargs)
  File "/opt/netbox/netbox/netbox/views/__init__.py", line 181, in get
    filtered_queryset = filterset({'q': form.cleaned_data['q']}, queryset=queryset).qs
  File "/opt/netbox/venv/lib/python3.9/site-packages/django_filters/filterset.py", line 243, in qs
    qs = self.filter_queryset(qs)
  File "/opt/netbox/venv/lib/python3.9/site-packages/django_filters/filterset.py", line 230, in filter_queryset
    queryset = self.filters[name].filter(queryset, value)
  File "/opt/netbox/venv/lib/python3.9/site-packages/django_filters/filters.py", line 779, in __call__
    return self.method(qs, self.f.field_name, value)
  File "/opt/netbox/netbox/dcim/filtersets.py", line 171, in search
    return queryset.filter(qs_filter)
  File "/opt/netbox/venv/lib/python3.9/site-packages/django/db/models/query.py", line 974, in filter
    return self._filter_or_exclude(False, args, kwargs)
  File "/opt/netbox/venv/lib/python3.9/site-packages/django/db/models/query.py", line 992, in _filter_or_exclude
    clone._filter_or_exclude_inplace(negate, args, kwargs)
  File "/opt/netbox/venv/lib/python3.9/site-packages/django/db/models/query.py", line 999, in _filter_or_exclude_inplace
    self._query.add_q(Q(*args, **kwargs))
  File "/opt/netbox/venv/lib/python3.9/site-packages/django/db/models/sql/query.py", line 1375, in add_q
    clause, _ = self._add_q(q_object, self.used_aliases)
  File "/opt/netbox/venv/lib/python3.9/site-packages/django/db/models/sql/query.py", line 1396, in _add_q
    child_clause, needed_inner = self.build_filter(
  File "/opt/netbox/venv/lib/python3.9/site-packages/django/db/models/sql/query.py", line 1252, in build_filter
    return self._add_q(
  File "/opt/netbox/venv/lib/python3.9/site-packages/django/db/models/sql/query.py", line 1396, in _add_q
    child_clause, needed_inner = self.build_filter(
  File "/opt/netbox/venv/lib/python3.9/site-packages/django/db/models/sql/query.py", line 1271, in build_filter
    lookups, parts, reffed_expression = self.solve_lookup_type(arg)
  File "/opt/netbox/venv/lib/python3.9/site-packages/django/db/models/sql/query.py", line 1099, in solve_lookup_type
    _, field, _, lookup_parts = self.names_to_path(lookup_splitted, self.get_meta())
  File "/opt/netbox/venv/lib/python3.9/site-packages/django/db/models/sql/query.py", line 1522, in names_to_path
    raise FieldError("Cannot resolve keyword '%s' into field. "

Exception Type: FieldError at /search/
Exception Value: Cannot resolve keyword 'asn' into field. Choices are: _name, asns, circuit_terminations, clusters, comments, contacts, created, custom_field_data, description, devices, facility, group, group_id, id, images, journal_entries, last_updated, latitude, locations, longitude, name, physical_address, powerpanel, prefixes, racks, region, region_id, shipping_address, slug, status, tagged_items, tags, tenant, tenant_id, time_zone, vlan_groups, vlans
jcollie commented 2 years ago

Clarifying that this only happens when searching for "All Objects". Searching for just devices works just fine.

raschkeb commented 2 years ago

It can be easily reproduced with the beta-demo site:

https://beta-demo.netbox.dev/search/?q=42&obj_type=

leads to: <class 'django.core.exceptions.FieldError'>

Cannot resolve keyword 'asn' into field. Choices are: _name, asns, circuit_terminations, clusters, comments, contacts, created, custom_field_data, description, devices, facility, group, group_id, id, images, journal_entries, last_updated, latitude, locations, longitude, name, physical_address, powerpanel, prefixes, racks, region, region_id, shipping_address, slug, status, tagged_items, tags, tenant, tenant_id, time_zone, vlan_groups, vlans

Python version: 3.8.10 NetBox version: 3.2.0-beta2

But only for integer numbers. Text entered in the search field leads to the expected results.