Closed hachacha closed 3 years ago
NavItems use django's implementation of generic foreign keys, which is (in)famous for not providing any integrity at the database level. I'll look into adding some further checks and the application level to avoid creating duplicate entries.
In the interim, can you share a bit of the stack trace were this is being raised? there are a few bits of logic in charge of fetching NavItems?
It's a template error.
Above the line where there's the error i see {#Custom Issue types navigation#}
Here's the full-on traceback
Environment:
Request Method: GET
Request URL: http://janeway-dev.library.cmu.edu/ETHOS/cms/
Django Version: 1.11.29
Python Version: 3.6.9
Installed Applications:
['django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.humanize',
'cms',
'core',
'copyediting',
'cron',
'events',
'identifiers',
'journal',
'metrics',
'comms',
'preprint',
'press',
'production',
'proofing',
'review',
'reports',
'security',
'submission',
'transform',
'utils',
'install',
'workflow',
'django_summernote',
'markdown_deux',
'hvad',
'raven.contrib.django.raven_compat',
'bootstrap4',
'rest_framework',
'foundationform',
'materialize',
'snowpenguin.django.recaptcha2',
'simplemathcaptcha',
'django.forms',
'plugins.back_content',
'plugins.pandoc_plugin',
'plugins.archive_plugin',
'core.homepage_elements.about',
'core.homepage_elements.carousel',
'core.homepage_elements.featured',
'core.homepage_elements.html',
'core.homepage_elements.issue',
'core.homepage_elements.journals',
'core.homepage_elements.journals_and_html',
'core.homepage_elements.news',
'core.homepage_elements.popular',
'core.homepage_elements.preprints']
Installed Middleware:
('raven.contrib.django.middleware.SentryMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware',
'core.middleware.TimezoneMiddleware',
'core.middleware.SiteSettingsMiddleware',
'utils.template_override_middleware.ThemeEngineMiddleware',
'core.middleware.MaintenanceModeMiddleware',
'cron.middleware.CronMiddleware',
'core.middleware.CounterCookieMiddleware',
'django.middleware.locale.LocaleMiddleware',
'core.middleware.PressMiddleware',
'core.middleware.GlobalRequestMiddleware',
'django.middleware.gzip.GZipMiddleware')
Template error:
In template /home/ulredcarpet/janeway/src/templates/admin/elements/cms_nav.html, error at line 29
get() returned more than one NavigationItem -- it returned 6! 19 : <a class="tiny button" href="{% url 'cms_nav_edit' sub_nav.pk %}"><i class="fa fa-edit"></i></a>
20 : <button class="tiny button" name="delete_nav" value="{{ sub_nav.pk }}">
21 : <i class="fa fa-times"></i>
22 : </button>
23 : </li>
24 : {% endfor %}
25 : </ul>
26 : {% endif %}
27 : {% endfor %}
28 : {#Custom Issue types navigation#}
29 : {% for issue_type, nav in collection_nav_items %}
30 : <li>{{ issue_type.plural_name }}
31 : {% if nav %}
32 : <a class="tiny button" href="{% url 'cms_nav_edit' nav.pk %}"><i class="fa fa-edit"></i></a>
33 : {% endif %}
34 : <button class="tiny button" name="toggle_collection_nav" value="{{ issue_type.pk }}"><i class="fa fa-{% if nav %}times{% else %}check{% endif %}"></i>
35 : </li>
36 : {% endfor %}
37 : {% if request.journal %}
38 : <li>News
39 : <button class="tiny button" name="nav" value="nav_news"><i
Traceback:
File "/home/ulredcarpet/.virtualenvs/janeway/lib/python3.6/site-packages/django/core/handlers/exception.py" in inner
41. response = get_response(request)
File "/home/ulredcarpet/.virtualenvs/janeway/lib/python3.6/site-packages/django/core/handlers/base.py" in _legacy_get_response
249. response = self._get_response(request)
File "/home/ulredcarpet/.virtualenvs/janeway/lib/python3.6/site-packages/django/core/handlers/base.py" in _get_response
187. response = self.process_exception_by_middleware(e, request)
File "/home/ulredcarpet/.virtualenvs/janeway/lib/python3.6/site-packages/django/core/handlers/base.py" in _get_response
185. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/ulredcarpet/janeway/src/security/decorators.py" in wrapper
63. return func(request, *args, **kwargs)
File "/home/ulredcarpet/janeway/src/security/decorators.py" in wrapper
167. return func(request, *args, **kwargs)
File "/home/ulredcarpet/janeway/src/cms/views.py" in index
80. return render(request, template, context)
File "/home/ulredcarpet/.virtualenvs/janeway/lib/python3.6/site-packages/django/shortcuts.py" in render
30. content = loader.render_to_string(template_name, context, request, using=using)
File "/home/ulredcarpet/.virtualenvs/janeway/lib/python3.6/site-packages/django/template/loader.py" in render_to_string
68. return template.render(context, request)
File "/home/ulredcarpet/.virtualenvs/janeway/lib/python3.6/site-packages/django/template/backends/django.py" in render
66. return self.template.render(context)
File "/home/ulredcarpet/.virtualenvs/janeway/lib/python3.6/site-packages/django/template/base.py" in render
207. return self._render(context)
File "/home/ulredcarpet/.virtualenvs/janeway/lib/python3.6/site-packages/django/test/utils.py" in instrumented_test_render
107. return self.nodelist.render(context)
File "/home/ulredcarpet/.virtualenvs/janeway/lib/python3.6/site-packages/django/template/base.py" in render
990. bit = node.render_annotated(context)
File "/home/ulredcarpet/.virtualenvs/janeway/lib/python3.6/site-packages/django/template/base.py" in render_annotated
957. return self.render(context)
File "/home/ulredcarpet/.virtualenvs/janeway/lib/python3.6/site-packages/django/template/loader_tags.py" in render
177. return compiled_parent._render(context)
File "/home/ulredcarpet/.virtualenvs/janeway/lib/python3.6/site-packages/django/test/utils.py" in instrumented_test_render
107. return self.nodelist.render(context)
File "/home/ulredcarpet/.virtualenvs/janeway/lib/python3.6/site-packages/django/template/base.py" in render
990. bit = node.render_annotated(context)
File "/home/ulredcarpet/.virtualenvs/janeway/lib/python3.6/site-packages/django/template/base.py" in render_annotated
957. return self.render(context)
File "/home/ulredcarpet/.virtualenvs/janeway/lib/python3.6/site-packages/django/template/loader_tags.py" in render
72. result = block.nodelist.render(context)
File "/home/ulredcarpet/.virtualenvs/janeway/lib/python3.6/site-packages/django/template/base.py" in render
990. bit = node.render_annotated(context)
File "/home/ulredcarpet/.virtualenvs/janeway/lib/python3.6/site-packages/django/template/base.py" in render_annotated
957. return self.render(context)
File "/home/ulredcarpet/.virtualenvs/janeway/lib/python3.6/site-packages/django/template/loader_tags.py" in render
216. return template.render(context)
File "/home/ulredcarpet/.virtualenvs/janeway/lib/python3.6/site-packages/django/template/base.py" in render
209. return self._render(context)
File "/home/ulredcarpet/.virtualenvs/janeway/lib/python3.6/site-packages/django/test/utils.py" in instrumented_test_render
107. return self.nodelist.render(context)
File "/home/ulredcarpet/.virtualenvs/janeway/lib/python3.6/site-packages/django/template/base.py" in render
990. bit = node.render_annotated(context)
File "/home/ulredcarpet/.virtualenvs/janeway/lib/python3.6/site-packages/django/template/base.py" in render_annotated
957. return self.render(context)
File "/home/ulredcarpet/.virtualenvs/janeway/lib/python3.6/site-packages/django/template/defaulttags.py" in render
172. values = list(values)
File "/home/ulredcarpet/janeway/src/cms/models.py" in get_content_nav_for_journal
94. object_id=issue_type.pk,
File "/home/ulredcarpet/.virtualenvs/janeway/lib/python3.6/site-packages/django/db/models/manager.py" in manager_method
85. return getattr(self.get_queryset(), name)(*args, **kwargs)
File "/home/ulredcarpet/.virtualenvs/janeway/lib/python3.6/site-packages/django/db/models/query.py" in get
384. (self.model._meta.object_name, num)
Exception Type: MultipleObjectsReturned at /cms/
Exception Value: get() returned more than one NavigationItem -- it returned 6!
Describe the bug This was discovered shortly after the last update to 1.3.8-RC-2 but it may have been happening before.
When navigating to the /cms/ editor for certain journals we get this error:
Janeway version 509b344b26075b2480872489903a4d3cd3282d8a
To Reproduce
Expected behavior see cms page
Additional context
I feel like this has happened before elsewhere and have remedied it by deleting duplicate entries from the database somehow. This was for HomePageElements not for NavigationItem. I believe I should be looking in to the database at the cms_navigationitem table When I look at that table i see this with a few duplicates (ids 43,44):
The strange thing is that wen going to the journal with the duplicates, LDR it loads just fine. But it does not work for our other journal, ETHOS). Is this something to o with the issue_types?