Feedback Xblock in Ulmo

Hi,

I am trying to use the Feedback Xblock GitHub - openedx/FeedbackXBlock: An XBlock to allow students to provide feedback on course materials

The Xblock shows correctly, but I can’t seem to find where, as an instructor, I can see the results of that feedback.

The xblock page mentions that it’s in the administrator dashboard, but I don’t find anything about it.

I am using Ulmo. Any guidance ?

I implemented GitHub - openedx/FeedbackXBlock: An XBlock to allow students to provide feedback on course materials which I missed before, but that causes an error 500 when loading the instructor dashboard

In the logs, I get

lms-1                   | 2026-02-19 21:25:20,122 INFO 23 [eventtracking.backends.async_routing] [user 5] [ip 57.134.91.53] async_routing.py:41 - [EventEmissionExit] skipping event /courses/course-v1:CQ+CIP101+v1/instructor
lms-1                   | 2026-02-19 21:25:20,123 INFO 23 [tracking] [user 5] [ip 57.134.91.53] logger.py:41 - {"name": "/courses/course-v1:CQ+CIP101+v1/instructor", "context": {"course_id": "course-v1:CQ+CIP101+v1", "course_user_tags": {}, "user_id": 5, "path": "/courses/course-v1:CQ+CIP101+v1/instructor", "org_id": "CQ", "enterprise_uuid": ""}, "username": "mboisson", "session": "765ee8474e69d17703326b5bdd69c4e9", "ip": "57.134.91.53", "agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36", "host": "edx.evolo-dev.calculquebec.cloud", "referer": "https://apps.edx.evolo-dev.calculquebec.cloud/", "accept_language": "fr-CA,fr;q=0.9,en-US;q=0.8,en;q=0.7,fr-FR;q=0.6", "event": "{\"GET\": {}, \"POST\": {}}", "time": "2026-02-19T21:25:20.122760+00:00", "event_type": "/courses/course-v1:CQ+CIP101+v1/instructor", "event_source": "server", "page": null}
lms-1                   | 2026-02-19 21:25:20,212 ERROR 23 [root] [user None] [ip None] signals.py:22 - Uncaught exception from None
lms-1                   | Traceback (most recent call last):
lms-1                   |   File "/openedx/venv/lib/python3.11/site-packages/django/core/handlers/exception.py", line 55, in inner
lms-1                   |     response = get_response(request)
lms-1                   |                ^^^^^^^^^^^^^^^^^^^^^
lms-1                   |   File "/openedx/venv/lib/python3.11/site-packages/django/core/handlers/base.py", line 197, in _get_response
lms-1                   |     response = wrapped_callback(request, *callback_args, **callback_kwargs)
lms-1                   |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
lms-1                   |   File "/opt/pyenv/versions/3.11.8/lib/python3.11/contextlib.py", line 81, in inner
lms-1                   |     return func(*args, **kwds)
lms-1                   |            ^^^^^^^^^^^^^^^^^^^
lms-1                   |   File "/openedx/venv/lib/python3.11/site-packages/django/utils/decorators.py", line 192, in _view_wrapper
lms-1                   |     result = _process_exception(request, e)
lms-1                   |              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
lms-1                   |   File "/openedx/venv/lib/python3.11/site-packages/django/utils/decorators.py", line 190, in _view_wrapper
lms-1                   |     response = view_func(request, *args, **kwargs)
lms-1                   |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
lms-1                   |   File "/openedx/venv/lib/python3.11/site-packages/django/views/decorators/cache.py", line 54, in _view_wrapper
lms-1                   |     response = viewfunc(request, *args, **kw)
lms-1                   |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
lms-1                   |   File "/openedx/edx-platform/lms/djangoapps/instructor/views/instructor_dashboard.py", line 274, in instructor_dashboard_2
lms-1                   |     context, instructor_template = InstructorDashboardRenderStarted.run_filter(
lms-1                   |                                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
lms-1                   |   File "/openedx/venv/lib/python3.11/site-packages/openedx_filters/learning/filters.py", line 1282, in run_filter
lms-1                   |     data = super().run_pipeline(context=context, template_name=template_name)
lms-1                   |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
lms-1                   |   File "/openedx/venv/lib/python3.11/site-packages/openedx_filters/tooling.py", line 198, in run_pipeline
lms-1                   |     steps = cls.get_steps_for_pipeline(pipeline, fail_silently)
lms-1                   |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
lms-1                   |   File "/openedx/venv/lib/python3.11/site-packages/openedx_filters/tooling.py", line 61, in get_steps_for_pipeline
lms-1                   |     function = import_string(step_path)
lms-1                   |                ^^^^^^^^^^^^^^^^^^^^^^^^
lms-1                   |   File "/openedx/venv/lib/python3.11/site-packages/django/utils/module_loading.py", line 30, in import_string
lms-1                   |     return cached_import(module_path, class_name)
lms-1                   |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
lms-1                   |   File "/openedx/venv/lib/python3.11/site-packages/django/utils/module_loading.py", line 15, in cached_import
lms-1                   |     module = import_module(module_path)
lms-1                   |              ^^^^^^^^^^^^^^^^^^^^^^^^^^
lms-1                   |   File "/opt/pyenv/versions/3.11.8/lib/python3.11/importlib/__init__.py", line 126, in import_module
lms-1                   |     return _bootstrap._gcd_import(name[level:], package, level)
lms-1                   |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
lms-1                   |   File "<frozen importlib._bootstrap>", line 1204, in _gcd_import
lms-1                   |   File "<frozen importlib._bootstrap>", line 1176, in _find_and_load
lms-1                   |   File "<frozen importlib._bootstrap>", line 1147, in _find_and_load_unlocked
lms-1                   |   File "<frozen importlib._bootstrap>", line 690, in _load_unlocked
lms-1                   |   File "<frozen importlib._bootstrap_external>", line 940, in exec_module
lms-1                   |   File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
lms-1                   |   File "/openedx/venv/lib/python3.11/site-packages/feedback/extensions/filters.py", line 12, in <module>
lms-1                   |     from cms.djangoapps.contentstore.utils import get_lms_link_for_item
lms-1                   |   File "/openedx/edx-platform/cms/djangoapps/contentstore/utils.py", line 38, in <module>
lms-1                   |     from cms.djangoapps.contentstore.toggles import (
lms-1                   |   File "/openedx/edx-platform/cms/djangoapps/contentstore/toggles.py", line 5, in <module>
lms-1                   |     from openedx.core.djangoapps.content.search import api as search_api
lms-1                   |   File "/openedx/edx-platform/openedx/core/djangoapps/content/search/api.py", line 33, in <module>
lms-1                   |     from openedx.core.djangoapps.content.search.index_config import (
lms-1                   |   File "/openedx/edx-platform/openedx/core/djangoapps/content/search/index_config.py", line 2, in <module>
lms-1                   |     from .documents import Fields
lms-1                   |   File "/openedx/edx-platform/openedx/core/djangoapps/content/search/documents.py", line 17, in <module>
lms-1                   |     from openedx.core.djangoapps.content.search.models import SearchAccess
lms-1                   |   File "/openedx/edx-platform/openedx/core/djangoapps/content/search/models.py", line 15, in <module>
lms-1                   |     class SearchAccess(models.Model):
lms-1                   |   File "/openedx/venv/lib/python3.11/site-packages/django/db/models/base.py", line 136, in __new__
lms-1                   |     raise RuntimeError(
lms-1                   | RuntimeError: Model class openedx.core.djangoapps.content.search.models.SearchAccess doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS.
lms-1                   | 2026-02-19 21:25:20,247 INFO 23 [edx.footer] [user 5] [ip 57.134.91.53] api.py:479 - images/logo.png
lms-1                   | 2026-02-19 21:25:20,259 ERROR 23 [django.request] [user 5] [ip 57.134.91.53] log.py:253 - Internal Server Error: /courses/course-v1:CQ+CIP101+v1/instructor
lms-1                   | Traceback (most recent call last):
lms-1                   |   File "/openedx/venv/lib/python3.11/site-packages/django/core/handlers/exception.py", line 55, in inner
lms-1                   |     response = get_response(request)
lms-1                   |                ^^^^^^^^^^^^^^^^^^^^^
lms-1                   |   File "/openedx/venv/lib/python3.11/site-packages/django/core/handlers/base.py", line 197, in _get_response
lms-1                   |     response = wrapped_callback(request, *callback_args, **callback_kwargs)
lms-1                   |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
lms-1                   |   File "/opt/pyenv/versions/3.11.8/lib/python3.11/contextlib.py", line 81, in inner
lms-1                   |     return func(*args, **kwds)
lms-1                   |            ^^^^^^^^^^^^^^^^^^^
lms-1                   |   File "/openedx/venv/lib/python3.11/site-packages/django/utils/decorators.py", line 192, in _view_wrapper
lms-1                   |     result = _process_exception(request, e)
lms-1                   |              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
lms-1                   |   File "/openedx/venv/lib/python3.11/site-packages/django/utils/decorators.py", line 190, in _view_wrapper
lms-1                   |     response = view_func(request, *args, **kwargs)
lms-1                   |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
lms-1                   |   File "/openedx/venv/lib/python3.11/site-packages/django/views/decorators/cache.py", line 54, in _view_wrapper
lms-1                   |     response = viewfunc(request, *args, **kw)
lms-1                   |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
lms-1                   |   File "/openedx/edx-platform/lms/djangoapps/instructor/views/instructor_dashboard.py", line 274, in instructor_dashboard_2
lms-1                   |     context, instructor_template = InstructorDashboardRenderStarted.run_filter(
lms-1                   |                                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
lms-1                   |   File "/openedx/venv/lib/python3.11/site-packages/openedx_filters/learning/filters.py", line 1282, in run_filter
lms-1                   |     data = super().run_pipeline(context=context, template_name=template_name)
lms-1                   |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
lms-1                   |   File "/openedx/venv/lib/python3.11/site-packages/openedx_filters/tooling.py", line 198, in run_pipeline
lms-1                   |     steps = cls.get_steps_for_pipeline(pipeline, fail_silently)
lms-1                   |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
lms-1                   |   File "/openedx/venv/lib/python3.11/site-packages/openedx_filters/tooling.py", line 61, in get_steps_for_pipeline
lms-1                   |     function = import_string(step_path)
lms-1                   |                ^^^^^^^^^^^^^^^^^^^^^^^^
lms-1                   |   File "/openedx/venv/lib/python3.11/site-packages/django/utils/module_loading.py", line 30, in import_string
lms-1                   |     return cached_import(module_path, class_name)
lms-1                   |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
lms-1                   |   File "/openedx/venv/lib/python3.11/site-packages/django/utils/module_loading.py", line 15, in cached_import
lms-1                   |     module = import_module(module_path)
lms-1                   |              ^^^^^^^^^^^^^^^^^^^^^^^^^^
lms-1                   |   File "/opt/pyenv/versions/3.11.8/lib/python3.11/importlib/__init__.py", line 126, in import_module
lms-1                   |     return _bootstrap._gcd_import(name[level:], package, level)
lms-1                   |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
lms-1                   |   File "<frozen importlib._bootstrap>", line 1204, in _gcd_import
lms-1                   |   File "<frozen importlib._bootstrap>", line 1176, in _find_and_load
lms-1                   |   File "<frozen importlib._bootstrap>", line 1147, in _find_and_load_unlocked
lms-1                   |   File "<frozen importlib._bootstrap>", line 690, in _load_unlocked
lms-1                   |   File "<frozen importlib._bootstrap_external>", line 940, in exec_module
lms-1                   |   File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
lms-1                   |   File "/openedx/venv/lib/python3.11/site-packages/feedback/extensions/filters.py", line 12, in <module>
lms-1                   |     from cms.djangoapps.contentstore.utils import get_lms_link_for_item
lms-1                   |   File "/openedx/edx-platform/cms/djangoapps/contentstore/utils.py", line 38, in <module>
lms-1                   |     from cms.djangoapps.contentstore.toggles import (
lms-1                   |   File "/openedx/edx-platform/cms/djangoapps/contentstore/toggles.py", line 5, in <module>
lms-1                   |     from openedx.core.djangoapps.content.search import api as search_api
lms-1                   |   File "/openedx/edx-platform/openedx/core/djangoapps/content/search/api.py", line 33, in <module>
lms-1                   |     from openedx.core.djangoapps.content.search.index_config import (
lms-1                   |   File "/openedx/edx-platform/openedx/core/djangoapps/content/search/index_config.py", line 2, in <module>
lms-1                   |     from .documents import Fields
lms-1                   |   File "/openedx/edx-platform/openedx/core/djangoapps/content/search/documents.py", line 17, in <module>
lms-1                   |     from openedx.core.djangoapps.content.search.models import SearchAccess
lms-1                   |   File "/openedx/edx-platform/openedx/core/djangoapps/content/search/models.py", line 15, in <module>
lms-1                   |     class SearchAccess(models.Model):
lms-1                   |   File "/openedx/venv/lib/python3.11/site-packages/django/db/models/base.py", line 136, in __new__
lms-1                   |     raise RuntimeError(
lms-1                   | RuntimeError: Model class openedx.core.djangoapps.content.search.models.SearchAccess doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS.
lms-1                   | [pid: 23|app: 0|req: 11/33] 172.18.0.3 () {66 vars in 4076 bytes} [Thu Feb 19 21:25:20 2026] GET /courses/course-v1:CQ+CIP101+v1/instructor => generated 16424 bytes in 159 msecs (HTTP/1.1 500) 8 headers in 535 bytes (1 switches on core 0)
caddy-1                 | {"level":"error","ts":1771536320.2673352,"logger":"http.log.access.log0","msg":"handled request","request":{"remote_ip":"172.16.148.203","remote_port":"47272","client_ip":"57.134.91.53","proto":"HTTP/1.1","method":"GET","host":"edx.evolo-dev.calculquebec.cloud","uri":"/courses/course-v1:CQ+CIP101+v1/instructor"},"bytes_read":0,"user_id":"","duration":0.163930703,"size":5562,"status":500}

This isn’t a frontend issue so I moved to Site Operations. I don’t know who’s using the block but hopefully that helps get the right eyes on it.

1 Like