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

Changelog page gives server error on upgraded installation #7119

Closed knan-md closed 3 years ago

knan-md commented 3 years ago

NetBox version

v3.0.0

Python version

3.8

Steps to Reproduce

Upgrade existing installation from v2.11.12 to v3.0.0.

Click Other => Change Log. See Exception.

Expected Behavior

The fine, shiny changelog page.

Observed Behavior

Output:

Server Error

There was a problem with your request. Please contact an administrator.

The complete exception is provided below:

<class 'AttributeError'>

'NoneType' object has no attribute '_meta'

Python version: 3.8.11 NetBox version: 3.0.0

Enabled debug and got this traceback:

` Environment:

Request Method: GET Request URL: https://netbox.modirum.com/extras/changelog/

Django Version: 3.2.6 Python Version: 3.8.11 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', 'taggit', 'timezone_field', 'circuits', 'dcim', 'ipam', 'extras', 'tenancy', 'users', 'utilities', 'virtualization', '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.APIVersionMiddleware', 'netbox.middleware.ObjectChangeMiddleware', 'django_prometheus.middleware.PrometheusAfterMiddleware']

Template error: In template /usr/local/www/netbox/netbox/netbox/templates/inc/table.html, error at line 20 'NoneType' object has no attribute '_meta' 10 : {% else %} 11 : <th {{ column.attrs.th.as_html }}>{{ column.header }} 12 : {% endif %} 13 : {% endfor %} 14 : 15 : 16 : {% endif %} 17 : 18 : {% for row in table.page.object_list|default:table.rows %} 19 : <tr {{ row.attrs.as_html }}> 20 : {% for column, cell in row.items %} 21 : <td {{ column.attrs.td.as_html }}>{{ cell }} 22 : {% endfor %} 23 : 24 : {% empty %} 25 : {% if table.empty_text %} 26 : 27 : — {{ table.empty_text }} — 28 : 29 : {% endif %} 30 : {% endfor %}

Traceback (most recent call last): File "/usr/local/www/netbox/netbox-venv/lib/python3.8/site-packages/django/core/handlers/exception.py", line 47, in inner response = get_response(request) File "/usr/local/www/netbox/netbox-venv/lib/python3.8/site-packages/django/core/handlers/base.py", line 181, in _get_response response = wrapped_callback(request, *callback_args, callback_kwargs) File "/usr/local/www/netbox/netbox-venv/lib/python3.8/site-packages/django/views/generic/base.py", line 70, in view return self.dispatch(request, *args, *kwargs) File "/usr/local/www/netbox/netbox/netbox/utilities/views.py", line 93, in dispatch return super().dispatch(request, args, kwargs) File "/usr/local/www/netbox/netbox-venv/lib/python3.8/site-packages/django/views/generic/base.py", line 98, in dispatch return handler(request, *args, kwargs) File "/usr/local/www/netbox/netbox/netbox/netbox/views/generic.py", line 189, in get return render(request, self.template_name, context) File "/usr/local/www/netbox/netbox-venv/lib/python3.8/site-packages/django/shortcuts.py", line 19, in render content = loader.render_to_string(template_name, context, request, using=using) File "/usr/local/www/netbox/netbox-venv/lib/python3.8/site-packages/django/template/loader.py", line 62, in render_to_string return template.render(context, request) File "/usr/local/www/netbox/netbox-venv/lib/python3.8/site-packages/django/template/backends/django.py", line 61, in render return self.template.render(context) File "/usr/local/www/netbox/netbox-venv/lib/python3.8/site-packages/django/template/base.py", line 170, in render return self._render(context) File "/usr/local/www/netbox/netbox-venv/lib/python3.8/site-packages/django/test/utils.py", line 100, in instrumented_test_render return self.nodelist.render(context) File "/usr/local/www/netbox/netbox-venv/lib/python3.8/site-packages/django/template/base.py", line 938, in render bit = node.render_annotated(context) File "/usr/local/www/netbox/netbox-venv/lib/python3.8/site-packages/django/template/base.py", line 905, in render_annotated return self.render(context) File "/usr/local/www/netbox/netbox-venv/lib/python3.8/site-packages/django/template/loader_tags.py", line 150, in render return compiled_parent._render(context) File "/usr/local/www/netbox/netbox-venv/lib/python3.8/site-packages/django/test/utils.py", line 100, in instrumented_test_render return self.nodelist.render(context) File "/usr/local/www/netbox/netbox-venv/lib/python3.8/site-packages/django/template/base.py", line 938, in render bit = node.render_annotated(context) File "/usr/local/www/netbox/netbox-venv/lib/python3.8/site-packages/django/template/base.py", line 905, in render_annotated return self.render(context) File "/usr/local/www/netbox/netbox-venv/lib/python3.8/site-packages/django/template/loader_tags.py", line 150, in render return compiled_parent._render(context) File "/usr/local/www/netbox/netbox-venv/lib/python3.8/site-packages/django/test/utils.py", line 100, in instrumented_test_render return self.nodelist.render(context) File "/usr/local/www/netbox/netbox-venv/lib/python3.8/site-packages/django/template/base.py", line 938, in render bit = node.render_annotated(context) File "/usr/local/www/netbox/netbox-venv/lib/python3.8/site-packages/django/template/base.py", line 905, in render_annotated return self.render(context) File "/usr/local/www/netbox/netbox-venv/lib/python3.8/site-packages/django/template/loader_tags.py", line 150, in render return compiled_parent._render(context) File "/usr/local/www/netbox/netbox-venv/lib/python3.8/site-packages/django/test/utils.py", line 100, in instrumented_test_render return self.nodelist.render(context) File "/usr/local/www/netbox/netbox-venv/lib/python3.8/site-packages/django/template/base.py", line 938, in render bit = node.render_annotated(context) File "/usr/local/www/netbox/netbox-venv/lib/python3.8/site-packages/django/template/base.py", line 905, in render_annotated return self.render(context) File "/usr/local/www/netbox/netbox-venv/lib/python3.8/site-packages/django/template/loader_tags.py", line 62, in render result = block.nodelist.render(context) File "/usr/local/www/netbox/netbox-venv/lib/python3.8/site-packages/django/template/base.py", line 938, in render bit = node.render_annotated(context) File "/usr/local/www/netbox/netbox-venv/lib/python3.8/site-packages/django/template/base.py", line 905, in render_annotated return self.render(context) File "/usr/local/www/netbox/netbox-venv/lib/python3.8/site-packages/django/template/loader_tags.py", line 62, in render result = block.nodelist.render(context) File "/usr/local/www/netbox/netbox-venv/lib/python3.8/site-packages/django/template/base.py", line 938, in render bit = node.render_annotated(context) File "/usr/local/www/netbox/netbox-venv/lib/python3.8/site-packages/django/template/base.py", line 905, in render_annotated return self.render(context) File "/usr/local/www/netbox/netbox-venv/lib/python3.8/site-packages/django_tables2/templatetags/django_tables2.py", line 167, in render return template.render(context={"table": table}, request=request) File "/usr/local/www/netbox/netbox-venv/lib/python3.8/site-packages/django/template/backends/django.py", line 61, in render return self.template.render(context) File "/usr/local/www/netbox/netbox-venv/lib/python3.8/site-packages/django/template/base.py", line 170, in render return self._render(context) File "/usr/local/www/netbox/netbox-venv/lib/python3.8/site-packages/django/test/utils.py", line 100, in instrumented_test_render return self.nodelist.render(context) File "/usr/local/www/netbox/netbox-venv/lib/python3.8/site-packages/django/template/base.py", line 938, in render bit = node.render_annotated(context) File "/usr/local/www/netbox/netbox-venv/lib/python3.8/site-packages/django/template/base.py", line 905, in render_annotated return self.render(context) File "/usr/local/www/netbox/netbox-venv/lib/python3.8/site-packages/django/template/defaulttags.py", line 211, in render nodelist.append(node.render_annotated(context)) File "/usr/local/www/netbox/netbox-venv/lib/python3.8/site-packages/django/template/base.py", line 905, in render_annotated return self.render(context) File "/usr/local/www/netbox/netbox-venv/lib/python3.8/site-packages/django/template/defaulttags.py", line 167, in render values = list(values) File "/usr/local/www/netbox/netbox-venv/lib/python3.8/site-packages/django_tables2/rows.py", line 244, in items column.current_value = self.get_cell(column.name) File "/usr/local/www/netbox/netbox-venv/lib/python3.8/site-packages/django_tables2/rows.py", line 197, in get_cell return self._get_and_render_with( File "/usr/local/www/netbox/netbox-venv/lib/python3.8/site-packages/django_tables2/rows.py", line 173, in _get_and_render_with return render_func(bound_column, value) File "/usr/local/www/netbox/netbox-venv/lib/python3.8/site-packages/django_tables2/rows.py", line 206, in _call_render content = call_with_appropriate(bound_column.render, render_kwargs) File "/usr/local/www/netbox/netbox-venv/lib/python3.8/site-packages/django_tables2/utils.py", line 572, in call_with_appropriate return fn(kwargs) File "/usr/local/www/netbox/netbox/netbox/utilities/tables.py", line 240, in render return content_type_name(value) File "/usr/local/www/netbox/netbox/netbox/utilities/utils.py", line 310, in content_type_name meta = contenttype.model_class()._meta

Exception Type: AttributeError at /extras/changelog/ Exception Value: 'NoneType' object has no attribute '_meta' `

knan-md commented 3 years ago

This installation started out on 2.1.x back in the day and has been upgraded regularly.

knan-md commented 3 years ago

This seems to be related to the pagination.per_page preference setting, when we remove that from our preferences the error disappears.

We had 260 entries in the changelog and pagination.per_page set to 250.

jeremystretch commented 3 years ago

This should be resolved under #7082 in v3.0.1. If you still experience the error after upgrading, please ask for the issue to be re-opened.

mhalden commented 3 years ago

I tried to apply the commit from that issue, but it did not help. We still get the same exception and stack trace after applying the patch.

Looking at the comments in that issue it doesn't look like it was completely solved as they are getting what looks like the same exception as us.

In addition, we discovered that after removing the paging preference some pages still get the same error, while others don't. I have a feeling the person in the other issue is on to something when speculating this is related to the removed secrets functionality as this is something we have used before.

mhalden commented 3 years ago

I just upgraded to 3.0.1 and the problem is still exists.

jeremystretch commented 3 years ago

Okay, can you see if you can figure out a way to reproduce the error on a clean install, or the demo instance?

mhalden commented 3 years ago

Looking closer at this, it seems to be the same as #7082.