diff --git a/netbox/extras/dashboard/widgets.py b/netbox/extras/dashboard/widgets.py index f88490ad266..935e480514e 100644 --- a/netbox/extras/dashboard/widgets.py +++ b/netbox/extras/dashboard/widgets.py @@ -209,7 +209,10 @@ def render(self, request): url = get_action_url(model, action='list') except NoReverseMatch: url = None - qs = model.objects.restrict(request.user, 'view') + try: + qs = model.objects.restrict(request.user, 'view') + except AttributeError: + qs = model.objects.all() # Apply any specified filters if url and (filters := self.config.get('filters')): params = dict_to_querydict(filters) diff --git a/netbox/extras/templatetags/dashboard.py b/netbox/extras/templatetags/dashboard.py index 4ac31abcf5e..67fa4024cc6 100644 --- a/netbox/extras/templatetags/dashboard.py +++ b/netbox/extras/templatetags/dashboard.py @@ -1,4 +1,6 @@ from django import template +from django.utils.safestring import mark_safe +from django.utils.translation import gettext as _ register = template.Library() @@ -8,4 +10,16 @@ def render_widget(context, widget): request = context['request'] - return widget.render(request) + try: + return widget.render(request) + except Exception as e: + message1 = _('An error was encountered when attempting to render this widget:') + message2 = _('Please try reconfiguring the widget, or remove it from your dashboard.') + return mark_safe(f""" +
+ + {message1} +
+{e}
+{message2}
+ """)